在使用过滤器与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;
请原谅我的无知,我对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
答案 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));