使用log4j如何在logfile中打印System.out.println语句

时间:2017-05-25 10:38:38

标签: java log4j

我正在学习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

所以有人建议,我需要改变/添加新东西吗?

2 个答案:

答案 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语句。