2016-07-27 71 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

相關問題