mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[script debugger] Use nio in MessagingLogger
GitOrigin-RevId: 606561d969511ededa4978cdc9043606a3222850
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d958b4c717
commit
aee08bf366
@@ -20,5 +20,6 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.concurrency" />
|
||||
<orderEntry type="module" module-name="intellij.platform.ide.util.netty" />
|
||||
<orderEntry type="module" module-name="intellij.platform.ide.core.impl" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.ex" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user