您的位置:首页 > 编程语言 > Java开发

Springboot log4j2异步日志过滤器组合使用

2020-07-14 05:42 71 查看

log4j2总章

log4j2异步日志时,有时需要配置过滤器,本章介绍异步日志中过滤器的组合使用(全局过滤器以及Appender级别过滤器组合使用)

配置文件配置方式

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" >
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<!-- 异步日志中Appender级别滤器因为是异步执行,可进行细致的过滤 -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Console>
</Appenders>
<Async name="Async-Console">
<AppenderRef ref="Console"/>
</Async>
<!-- 全局过滤器进行简单的全局过滤,自定义全局过滤器处理逻辑应尽可能简单 -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<Loggers>
<Root level="debug">
<AppenderRef ref="Async-Console"/>
</Root>
</Loggers>
</Configuration>

代码进行配置

private Appender consoleAppender(@Qualifier("log4j-configuration") Configuration configuration) {
final String name = "Console";
configuration.getRootLogger().removeAppender(name); //程序已经有一个Console,所以先清除, 然后再添加含有过滤器的Appender
Layout<String> layout = PatternLayout.newBuilder()
.withPattern(layoutPattern).build();
Filter filter = ThresholdFilter.createFilter(Level.INFO, Filter.Result.ACCEPT, Filter.Result.DENY);
ConsoleAppender appender = ConsoleAppender.createAppender(layout, filter, ConsoleAppender.Target.SYSTEM_OUT,
name, false, false, true);
appender.start();

configuration.getRootLogger().addAppender(appender, null, null);
return appender;
}
@Bean("log4j-configuration")
public Configuration configuration(LoggingServer loggingServer) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration configuration = ctx.getConfiguration();

consoleAppender(configuration);
return configuration;
}
@Bean("global-filter")
public Filter globalFilter(@Qualifier("log4j-configuration") Configuration configuration) {
Filter global = ThresholdFilter.createFilter(Level.INFO, Filter.Result.ACCEPT, Filter.Result.DENY);
configuration.addFilter(global);
return global;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: