2016-07-27 96 views
0

我正在以编程方式使用log4j。它似乎在控制台消息之外工作。 System.out消息不会出现。 logger.info/error/etc全部出现在文件中。你能否记录System.out信息?我究竟做错了什么?log4j以编程方式获取控制台appender以将System.out包括到文件

Logger logger = Logger.getRootLogger(); 
      logger = Logger.getLogger("com.mycodebase"); 

    ConsoleAppender consoleAppender = new ConsoleAppender(); 
     PatternLayout consolePatternLayout = new PatternLayout(); 
     consolePatternLayout.setConversionPattern("%d{dd MMM yyyy} %d{HH:mm:ss}: %5p %c{1}:%L - %m%n"); 
     consoleAppender.setLayout(consolePatternLayout); 
     consoleAppender.setName("Iridium Suite Console appender"); 
     consoleAppender.setThreshold(Level.INFO); 
     consoleAppender.activateOptions(); 

     //Create Iridium Suite log file appender 
     isAppender = new RollingFileAppender(); 
     isAppender.setFile(logFileName); 
     PatternLayout isPatternLayout = new PatternLayout(); 
     isPatternLayout.setConversionPattern("%d{dd MMM yyyy} %d{HH:mm:ss}: %5p %c{1}:%L - %m%n"); 
     isAppender.setLayout(isPatternLayout); 
     isAppender.setThreshold(Level.INFO); 
     isAppender.setName("log appender"); 
     isAppender.setAppend(true); 
     isAppender.setMaxBackupIndex(0); 
     isAppender.setMaxFileSize("2MB"); 
     isAppender.activateOptions(); 

     Logger.getRootLogger().addAppender(consoleAppender); 
     Logger.getRootLogger().addAppender(isAppender); 
+0

您是否尝试将'System.out'重定向到log4j而不是控制台? – bradimus

+0

不是,更像是除了。我认为log4j也可以捕捉到这一点。 – springcorn

回答

1

ConsoleAppender用于将您的日志消息定向到标准输出,而不是反过来。人们在这里想出了很好的解决方案: log4j redirect stdout to DailyRollingFileAppender

+0

谢谢。我想我开始明白,System.etc和log4j是替代实现而不是互补的。我希望system.out集成到log4j中,而不是相反。我看到我可以如何使用这个链接到的示例,但我不确定我喜欢那种笨手笨脚的重定向。我担心用于调试的重定向会造成自己的问题。 – springcorn

+0

那么为了简化这个过程,你可以简单地用代码logger.info或logger.debug替换代码中的所有System.out.prints或者其他东西,因为你已经将你的日志导向stdout,所以它基本上具有相同的效果。 虽然如果你想使用logger.debug,你将不得不降低阈值水平。 – h3X3n

+0

是的,这就是我正在意识到的。但是不幸的是没有办法说logger.setAppendAllSystemOutput(true); – springcorn

相关问题