我正在学习log4j,我正面临这个问题。
在我当前的示例中,我无法在日志文件中打印 System.out.println 语句。
我在Stack Overflow中经历了其他问题和答案,这是一个重复的问题,但我仍然不理解这些问题。
以下是Java类
public class Testing
{
private final static Logger logger = Logger.getLogger(Testing.class);
static
{
PropertyConfigurator.configure("log4j.properties");
}
public static void main(String args[])
{
System.out.println("Entered main method...............");
logger.error("An error has occurred might");
}
}
log4j.properties文件:
log4j.rootLogger=DEBUG, file, console
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/justfortesting.log
log4j.appender.file.Append=true
log4j.appender.file.ImmediateFlush=true
log4j.appender.FILE.filter.b=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.FILE.filter.b.LevelToMatch=ERROR
log4j.appender.FILE.filter.b.AcceptOnMatch=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n
log4j.logger.com.log4j=DEBUG, file, console
log4j.additivity.com.log4j=false
所以有人建议,我需要改变/添加新东西吗?
答案 0 :(得分:0)
System.out.println()
写入标准输出。如果要将这些消息写入日志,则必须调用记录器方法:
public static void main(String args[])
{
logger.info("Entered main method...............");
logger.error("An error has occurred might");
}
答案 1 :(得分:0)
通过修改我的测试类并使用现有代码添加了一个新类,我得到了上述问题的解决方案。
public class Testing
{
private final static Logger logger = Logger.getLogger(Testing.class);
static
{
PropertyConfigurator.configure("log4j.properties");
}
public static void main(String args[])
{
Logger out = Logger.getLogger("SystemOut");
Level info = Level.INFO;
System.setOut(new PrintStream(new LoggingOutputStream(out, info),true));
System.out.println("Entered main method...............");
System.out.println("Printing 2nd...............");
}
}
添加了LoggingOutputStream类,用于在日志文件中打印System.out.println语句。