将日志写入标准输出或log4j中的文件java
问题描述:
我想根据变量将log4j日志写入标准输出或文件。如果设置了变量writeLogToFile,则日志应该写入文件,否则写入标准输出。将日志写入标准输出或log4j中的文件java
我已经尝试使用下面的代码,但日志被写入文件以及标准输出。
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
}
/*some code which uses info and debug methods to write log*/
}
}
当我希望日志写入标准输出时,默认情况下会将日志写入标准ouptput。但是,当我想将日志写入文件时,这会失败。日志既写入标准输出也写入文件。
所以,我试了下面的代码,但这也没有奏效。
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
Properties logProperties = new Properties();
logProperties.setProperty("log4j.additivity.notRootLogger", "false");
PropertyConfigurator.configure(logProperties);
}
/*some code which uses info and debug methods to write log*/
}
}
我也尝试以下
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
}
else {
ConsoleAppender cappender = new ConsoleAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), "System.out");
logger.addAppender(cappender);
}
/*some code which uses info and debug methods to write log*/
}
}
有人可以帮我解决这个问题?
[编辑]
好的。我想我解决了这个问题。我在我的代码中添加了一行logger.setAdditivity(false);
这样的代码
public class LTE {
private static Logger logger = Logger.getLogger(LTE.class);
public static void main(String[] args) {
/*some code which sets variables writeLogToFile and logFile*/
BasicConfigurator.configure();
if(writeLogToFile) {
FileAppender fappender = new FileAppender(new PatternLayout("%-6p [%t] (%F:%L) %m%n"), logFile);
logger.addAppender(fappender);
logger.setAdditivity(false); //added line here
}
/*some code which uses info and debug methods to write log*/
}
}
现在它工作正常。如果writeLogToFile=true
则日志写入标准输出,否则写入文件。
答
也许你已经配置你的记录器已经包含一个ConsoleAppender?您应该尝试显示所有Appender:尝试使用Logger.getAllAppenders()并显示其类。
您还可以查看log4j.properties和log4j.xml文件。
答
你可以用这个例子: how to write different information to two different files using same logger of log4j?
然后在你的程序中你决定使用哪个记录。
if(writeLogToFile)
logger.debug("My normal log");
else
otherLogger.info("My special text");
粘贴你的log4j配置文件 – Drona
我在保罗答复的答复中粘贴了配置文件。顺便说一句,我找到了解决方案,并且我已经相应地编辑了我原来的帖子。 – jyotesh