diff --git a/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml b/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml
index b854c0f62252..f0a16ac99ced 100644
--- a/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml
+++ b/platform/script-debugger/backend/intellij.platform.scriptDebugger.backend.iml
@@ -20,5 +20,6 @@
+
\ No newline at end of file
diff --git a/platform/script-debugger/backend/src/debugger/util.kt b/platform/script-debugger/backend/src/debugger/util.kt
index b6eea7b5ace9..d4c9372ea1e3 100644
--- a/platform/script-debugger/backend/src/debugger/util.kt
+++ b/platform/script-debugger/backend/src/debugger/util.kt
@@ -3,22 +3,20 @@ package org.jetbrains.debugger
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.io.FileUtil
-import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.openapi.util.registry.Registry
import com.intellij.util.concurrency.AppExecutorUtil
import com.intellij.util.io.addChannelListener
-import com.intellij.util.text.CharSequenceBackedByChars
+import com.intellij.util.io.createParentDirectories
import io.netty.buffer.ByteBuf
import io.netty.channel.Channel
import org.jetbrains.annotations.ApiStatus
-import java.io.File
-import java.io.FileOutputStream
-import java.nio.CharBuffer
import java.text.SimpleDateFormat
import java.util.concurrent.Future
import java.util.concurrent.LinkedBlockingQueue
import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicInteger
+import kotlin.io.path.Path
+import kotlin.io.path.writer
internal class LogEntry(val message: CharSequence, val marker: String) {
internal val time = System.currentTimeMillis()
@@ -34,44 +32,35 @@ class MessagingLogger internal constructor(debugFileBaseName: String, suffix: St
val sessionNumber = sequentialNumber.getAndIncrement()
val nameSuffix = if (sessionNumber == 0) "$suffix.json" else "$suffix-$sessionNumber.json"
- val file = File(FileUtil.expandUserHome(debugFileBaseName + nameSuffix))
- FileUtilRt.createParentDirs(file)
- val out = FileOutputStream(file)
- val writer = out.writer()
- writer.write("[\n")
- writer.flush()
- val fileChannel = out.channel
-
- val dateFormatter = SimpleDateFormat("HH.mm.ss,SSS")
-
- try {
- while (true) {
- val entry = queue.take()
-
- writer.write("""{"timestamp": "${dateFormatter.format(entry.time)}", """)
- val message = entry.message
- writer.write("\"${entry.marker}\": ")
- writer.flush()
-
- if (message is CharSequenceBackedByChars) {
- fileChannel.write(message.byteBuffer)
- }
- else {
- fileChannel.write(Charsets.UTF_8.encode(CharBuffer.wrap(message)))
- }
-
- writer.write("},\n")
- writer.flush()
- }
- }
- catch (e: InterruptedException) {
- // ignored
- }
- finally {
- writer.write("]")
+ val logPath = Path(FileUtil.expandUserHome(debugFileBaseName + nameSuffix))
+ logPath.createParentDirectories()
+ logPath.writer().use { writer ->
+ writer.write("[\n")
writer.flush()
- sequentialNumber.decrementAndGet()
- out.close()
+ val dateFormatter = SimpleDateFormat("HH.mm.ss,SSS")
+
+ try {
+ while (true) {
+ val entry = queue.take()
+
+ writer.write("""{"timestamp": "${dateFormatter.format(entry.time)}", """)
+ writer.write("\"${entry.marker}\": ")
+ writer.flush()
+
+ writer.append(entry.message)
+
+ writer.write("},\n")
+ writer.flush()
+ }
+ }
+ catch (_: InterruptedException) {
+ // ignored
+ }
+ finally {
+ writer.write("]")
+ writer.flush()
+ sequentialNumber.decrementAndGet()
+ }
}
}
}