From aee08bf366d2f1d37cf10b5fdc2e79bd69616a45 Mon Sep 17 00:00:00 2001 From: Shumaf Lovpache Date: Wed, 15 Jan 2025 13:29:22 +0200 Subject: [PATCH] [script debugger] Use nio in MessagingLogger GitOrigin-RevId: 606561d969511ededa4978cdc9043606a3222850 --- ...tellij.platform.scriptDebugger.backend.iml | 1 + .../backend/src/debugger/util.kt | 73 ++++++++----------- 2 files changed, 32 insertions(+), 42 deletions(-) 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() + } } } }