使用ConfigurationBuilder过滤

时间:2016-06-27 18:45:27

标签: java log4j

在使用过滤器与Log4j 2(2.4和2.6)配合使用时遇到问题。以前我有使用logback和XML配置的自定义过滤器。决定使用ConfigurationBuilder是合理的。

举一个简单的例子:



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

	 builder.setConfigurationName("TestLogger");
	 
	 AppenderComponentBuilder appenderBuilder = builder.newAppender("file", "FILE")			
        .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));		 
	 		 
	 
    appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%msg%n%throwable"));
	 
	 builder.add(appenderBuilder);
	 builder.add(builder.newLogger("TestLogger", Level.INFO)
			 .add(builder.newAppenderRef("file"))
			 	.addAttribute("additivity", false));
	 	
	 LoggerContext logctx = Configurator.initialize(builder.build()); 
		 
	 logFile = logctx.getLogger( "TestLogger" );
&#13;
&#13;
&#13;

请原谅我的无知,我对log4j的Java配置还不熟悉!

如果我初始化上下文(只是我当前的课程):

LoggerContext logctx = Configurator.initialize(builder.build());
logFile = logctx.getLogger(&#34; TestLogger&#34;);

并尝试:

logFile.info(&#34;信息级别记录&#34;); logFile.error(&#34;错误级别记录&#34;);

我看到了这两个输出。我认为LevelRangeFilter带有一系列INFO-&gt; INFO我只会看到信息日志级别?

实际上我想要的是根据日志级别拥有不同的appender(就像我对logback xml配置一样)。

我发现很难按照文档进行操作 - 尝试确定各种组件构建器使用的各种插件和属性,以及一般概念。

LevelRangeFilter似乎符合要求 - 我可以将不同的appender作为newAppenderRef添加到构建中,并根据较小的范围将它们写入不同的文件。

有什么想法吗?

谢谢!

C

1 个答案:

答案 0 :(得分:0)

解决了它。用于参考:https://logging.apache.org/log4j/2.x/log4j-core/apidocs/index.html

我把我的不匹配设置为NEUTRAL而不是DENY。让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));