我需要保存创建到文件的javax.net.debug = all输出.我正在使用log4j,我尝试创建一个日志代理,如下面的代码示例所示; 但是,它没有拿起信息.我不确定javax.net.debug的打印位置.我尝试以这种方式捕获system.out和system.err,但都没有工作.谢谢你的帮助.
public class StdOutErrLog {
private static final Logger logger = Logger.getLogger(StdOutErrLog.class);
public static void tieSystemOutAndErrToLog() {
System.setOut(createLoggingProxy(System.out));
System.setErr(createLoggingProxy(System.err));
}
public static PrintStream createLoggingProxy(final PrintStream realPrintStream) {
return new PrintStream(realPrintStream) {
public void print(final String string) {
realPrintStream.print(string);
logger.info(string);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
也许子系统会复制这些值,而且在切换时你也来不及.尝试在你的主要做这个.
编辑
好的 - 我完全错过了你的习语.我认为你不应该使用这个内部类.您应该在OutputStream上定义一个PrintStream实例,该实例在每个"\n"上创建一个新的日志条目.你现在的方式错过了很多可能"打印"你的实例.
package de.mit.stackoverflow;
import java.io.IOException;
import java.io.OutputStream;
public class LogOutputStream extends OutputStream {
private StringBuilder sb = new StringBuilder();
@Override
public void write(int b) throws IOException {
if (b == '\n') {
log(sb.toString());
sb.setLength(0);
} else {
sb.append((char) b);
}
}
}
然后呢
OutputStream os = new LogOutputStream();
PrintStream ps = new PrintStream(os);
System.setOut(ps);
Run Code Online (Sandbox Code Playgroud)
您可能仍希望包含对前一个流的引用 - 左为练习:-)
| 归档时间: |
|
| 查看次数: |
14495 次 |
| 最近记录: |