簡體   English   中英

Log4j具有帶log4j.properties的兩個輸出?

[英]Log4j with two outputs with log4j.properties?

我想使用Log4j API,但是在配置上遇到了一些問題。

這是我的LogWriter類別:

public class LogWriter {
    static Logger logger = Logger.getLogger(LogWriter.class);

    public LogWriter(String logFilePath) {
        File outFile = new File(logFilePath);
        try {
            PrintStream outStream = new PrintStream(new FileOutputStream(outFile));
            System.setOut(outStream));    
            System.setErr(outStream);
        } catch (FileNotFoundException e) {
            throw new IllegalArgumentException("File not Found");
        }
        BasicConfigurator.configure();
    }

    public void write(String infoString) {
        logger.info(infoString);
    }
}

現在這可以正常工作,但是我不能同時寫入Logger-File和Console(可能是因為System.setOut

我添加了一個log4j.properties文件,如下所示:

# Root logger option
log4j.rootLogger=INFO, console

# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p- %m%n

現在我的問題是,如何使我的LogWriter和log4j.properties文件一起工作,以便輸出進入Logger-File和Console? 我必須在LogWriter中進行哪些更改?

在安裝LogWriter之前,必須將存儲在System.outSystem.err中的原始引用的副本保留在某個位置。 使用它們編寫新的追加程序。 將log4j配置為在log4j.appender.console使用此附加程序。

背景:默認的log4j ConsoleAppender僅寫入System.out 如果更改它,log4j將使用您提供的任何內容。 無法將ConsoleAppender配置為在其他地方編寫。 LogWriter ,無法區分來自log4j的輸出和System.out.println()

因此,唯一的解決方案是編寫另一個寫入原始System.out附加程序。

也就是說,使用原始的ConsoleAppender並使用FileAppender代替您自己的LogWriter可能更聰明。 只要確保您絕對不要在代碼中的任何地方直接使用System.out

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM