2016-06-27 46 views
0

在使用Log4j 2(2.4和2.6)時遇到問題。以前我有使用logback和XML配置的自定義過濾器。決定改用ConfigurationBuilder是合理的。使用ConfigurationBuilder的過濾器

只給一個簡單的例子:

\t \t ConfigurationBuilder<BuiltConfiguration> builder = 
 
    ConfigurationBuilderFactory.newConfigurationBuilder(); 
 

 
\t builder.setConfigurationName("TestLogger"); 
 
\t 
 
\t AppenderComponentBuilder appenderBuilder = builder.newAppender("file", "FILE") \t \t \t 
 
     .addAttribute("fileName", "C:\\client_test.log").addAttribute("append", false).add(builder.newFilter("LevelRangeFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL). 
 
       addAttribute("minLevel", Level.INFO).addAttribute("maxLevel", Level.INFO)); \t \t 
 
\t \t \t 
 
\t 
 
    appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%msg%n%throwable")); 
 
\t 
 
\t builder.add(appenderBuilder); 
 
\t builder.add(builder.newLogger("TestLogger", Level.INFO) 
 
\t \t \t .add(builder.newAppenderRef("file")) 
 
\t \t \t \t .addAttribute("additivity", false)); 
 
\t \t 
 
\t LoggerContext logctx = Configurator.initialize(builder.build()); 
 
\t \t 
 
\t logFile = logctx.getLogger("TestLogger");

請原諒我的無知,我是相當新的Java配置的log4j的!

如果我初始化上下文(只是當前類我在):

LoggerContext logctx = Configurator.initialize(builder.build());
logFile = logctx.getLogger(「TestLogger」);

,並嘗試:

logFile.info( 「信息級別的日誌」); logFile.error(「Error level logging」);

我看到這兩個輸出。我認爲與LevelRangeFilter的一系列INFO-> INFO我只會看到信息日誌級別?

現實我要的是有根據的日誌級別不同的追加程序(如我與的logback xml配置)。

我發現很難按照文檔 - 試圖確定各種插件和屬性與各種組件的建設者和只是一般的概念中。

的LevelRangeFilter似乎符合該法案 - 在那裏我可以爲newAppenderRef到構建添加不同的附加目的地,並把它們寫出來,以基於窄幅區間不同的文件。

有什麼想法?

謝謝!

c

+0

解決了它。用它作爲參考:https://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html – Charles

回答

0

解決了它。用這種以供參考:https://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html

我有我的錯配設置爲中性,而不是DENY。將拒絕從日誌中刪除不良範圍。所以我能夠用兩個appender使用這個過濾器分割日誌,如下所示:

AppenderComponentBuilder appenderBuilderInfo = builder.newAppender("fileInfo", "FILE")   
.addAttribute("fileName", "C:\\client_info.log").addAttribute("append", false).add(builder.newFilter("LevelRangeFilter", Filter.Result.ACCEPT, Filter.Result.DENY) 
.addAttribute("minLevel", Level.INFO).addAttribute("maxLevel", Level.INFO));   

AppenderComponentBuilder appenderBuilderError = builder.newAppender("fileError", "FILE")    
.addAttribute("fileName", "C:\\client_error.log").addAttribute("append", false).add(builder.newFilter("LevelRangeFilter", Filter.Result.ACCEPT, Filter.Result.DENY) 
.addAttribute("minLevel", Level.ERROR).addAttribute("maxLevel", Level.ERROR)); 

appenderBuilderInfo.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%msg%n%throwable")); 
appenderBuilderError.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%msg%n%throwable")); 

builder.add(appenderBuilderInfo); 
builder.add(appenderBuilderError); 
builder.add(builder.newLogger("TestLogger", Level.INFO) 
    .add(builder.newAppenderRef("fileInfo")) 
    .addAttribute("additivity", false) 
    .add(builder.newAppenderRef("fileError")) 
    .addAttribute("additivity", false));