[英]Log4j with two outputs with log4j.properties?
我想使用Log4j API,但是在配置上遇到了一些问题。
这是我的LogWriter类别:
public class LogWriter {
static Logger logger = Logger.getLogger(LogWriter.class);
public LogWriter(String logFilePath) {
File outFile = new File(logFilePath);
try {
PrintStream outStream = new PrintStream(new FileOutputStream(outFile));
System.setOut(outStream));
System.setErr(outStream);
} catch (FileNotFoundException e) {
throw new IllegalArgumentException("File not Found");
}
BasicConfigurator.configure();
}
public void write(String infoString) {
logger.info(infoString);
}
}
现在这可以正常工作,但是我不能同时写入Logger-File和Console(可能是因为System.setOut
)
我添加了一个log4j.properties文件,如下所示:
# Root logger option
log4j.rootLogger=INFO, console
# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p- %m%n
现在我的问题是,如何使我的LogWriter和log4j.properties文件一起工作,以便输出进入Logger-File和Console? 我必须在LogWriter中进行哪些更改?
在安装LogWriter
之前,必须将存储在System.out
和System.err
中的原始引用的副本保留在某个位置。 使用它们编写新的追加程序。 将log4j配置为在log4j.appender.console
使用此附加程序。
背景:默认的log4j ConsoleAppender
仅写入System.out
。 如果更改它,log4j将使用您提供的任何内容。 无法将ConsoleAppender
配置为在其他地方编写。 在LogWriter
,无法区分来自log4j的输出和System.out.println()
。
因此,唯一的解决方案是编写另一个写入原始System.out
附加程序。
也就是说,使用原始的ConsoleAppender
并使用FileAppender
代替您自己的LogWriter
可能更聪明。 只要确保您绝对不要在代码中的任何地方直接使用System.out
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.