mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow logging IDEA process'es stdout/stderr
keep printing to console if logging is enabled GitOrigin-RevId: fcaead66c44d33036f7f34ae12781c5a37e40de7
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bc1774a812
commit
3adac8205e
@@ -2,30 +2,46 @@
|
||||
package com.intellij.idea;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
class PrintStreamLogger extends PrintStream {
|
||||
PrintStreamLogger(String name) {
|
||||
super(new OutputStreamLogger(name), true);
|
||||
PrintStreamLogger(String name, PrintStream originalStream) {
|
||||
super(new OutputStreamLogger(name, originalStream), true);
|
||||
}
|
||||
}
|
||||
|
||||
class OutputStreamLogger extends OutputStream {
|
||||
private static final int BUFFER_SIZE = 10000;
|
||||
private final byte[] myBuffer = new byte[BUFFER_SIZE];
|
||||
private final PrintStream myOriginalStream;
|
||||
private final Logger myLogger;
|
||||
private int myPosition;
|
||||
private boolean mySlashRWritten;
|
||||
|
||||
OutputStreamLogger(String name) {
|
||||
OutputStreamLogger(String name, PrintStream originalStream) {
|
||||
myOriginalStream = originalStream;
|
||||
myLogger = Logger.getInstance(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void write(int b) {
|
||||
public void write(int b) {
|
||||
myOriginalStream.write(b);
|
||||
processByte(b);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull byte[] b, int off, int len) {
|
||||
myOriginalStream.write(b, off, len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
processByte(b[off + i]);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void processByte(int b) {
|
||||
if (b == '\r') {
|
||||
writeBuffer();
|
||||
mySlashRWritten = true;
|
||||
|
||||
@@ -493,6 +493,7 @@ public final class StartupUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("UseOfSystemOutOrSystemErr")
|
||||
@NotNull
|
||||
private static Logger setupLogger() {
|
||||
Logger.setFactory(new LoggerFactory());
|
||||
@@ -502,8 +503,8 @@ public final class StartupUtil {
|
||||
log.info("------------------------------------------------------ IDE SHUTDOWN ------------------------------------------------------");
|
||||
});
|
||||
if (SystemProperties.getBooleanProperty("intellij.log.stdout", false)) {
|
||||
System.setOut(new PrintStreamLogger("STDOUT"));
|
||||
System.setErr(new PrintStreamLogger("STDERR"));
|
||||
System.setOut(new PrintStreamLogger("STDOUT", System.out));
|
||||
System.setErr(new PrintStreamLogger("STDERR", System.err));
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user