javalogback正则过滤
1需要引⽤jar包
<dependency>
<groupId&dehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>2.5.16</version>
</dependency>
2.修改logback 的配置,主要看logCenter
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="AppName" value="com.qdb"/>
<!-- 控制台⽇志 -->
<appender name="stdout" class="ch.ConsoleAppender">
<encoder>
<pattern>%date %level[%thread] %msg at %logger{36}[%file:%line]%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- INFO⽇志 -->
<appender name="logFile" class="ch.olling.RollingFileAppender">
<File>/opt/meituan/applog/acs/info/mt_info.log</File>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/meituan/applog/acs/info/mt_%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date %level[%thread] %X{ip} %msg at %logger{36}[%file:%line]%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- INFO⽇志 -->
<appender name="logCenter" class="ch.olling.RollingFileAppender">
<File> /opt/logs/data_collector/metrics_acs_settlement_log/mt_logCenter.log</File>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/logs/data_collector/metrics_acs_settlement_log/mt_logCenter_%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %X{hostname} com.qdb.acs.main %level [%thread] metrics_acs_settlement_log %msg at %logger{36}[%file:%line]%n</pattern> <charset>UTF-8</charset>
</encoder>
<filter class="ch.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>odd</Name>
<regex>.*XMDT.*?(?=\b)</regex>
</matcher>
<expression>odd.matches(formattedMessage)</expression>
</evaluator>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch>
<!-- <evaluator>
<expression>ains("abcdefghijklmn");</expression>
</evaluator>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>DENY</OnMismatch> -->
</filter>
</appender>
<!-- 采集⽇志 -->
<appender name="MonitorFILE" class="ch.olling.RollingFileAppender">
<File>/opt/meituan/applog/acs/monitor/monitor.log</File>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/meituan/applog/acs/monitor/%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss}|</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- ⽇志过滤器 -->
<!-- <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level>
<onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> -->
</appender>
<!--错误⽇志-->
<appender name="errorFile" class="ch.olling.RollingFileAppender">
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<FileNamePattern>/opt/meituan/applog/acs/error/mt_error.%d{yyyy-MM-dd}</FileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss}|qdb-core-acs|%c|%method:%L|%thread|%X{ip}|%m%n</pattern>
<charset>UTF-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 数据库访问较慢的语句 -->
<appender name="sqlFile" class="ch.olling.RollingFileAppender">
<File>/opt/meituan/applog/acs/slow/slow.log</File>
<encoder>
<pattern>%date %level[%thread] %msg at %logger{36}[%file:%line]%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/meituan/applog/acs/slow/%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- 数据库访问较慢的语句 -->
<appender name="sqlFileInfo" class="ch.olling.RollingFileAppender">
正则化过滤器<File>/opt/meituan/applog/acs/sqlInfo/sqlInfo.log</File>
<encoder>
<pattern>%date %level[%thread] %msg at %logger{36}[%file:%line]%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.olling.TimeBasedRollingPolicy">
<fileNamePattern>/opt/meituan/applog/acs/slow/sqlInfo_%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<logger name="com.alibaba.druid.filter.logging.Slf4jLogFilter" additivity="false" level="INFO">
<appender-ref ref="sqlFileInfo"/>
</logger>
<!-- JMX管理,logback⽀持使⽤JMX随时重载l或者单独设置某个package的level 如有需要可以打开配置-->
<jmxConfigurator />
<logger name="com.alibaba.druid.filter.stat.StatFilter" additivity="false" level="DEBUG">
<appender-ref ref="sqlFile"/>
</logger>
<logger name="com.qdb" level="DEBUG"/>
<logger name="org" level="INFO"/>
<logger name="com.qdb.logclient.logPage" level="INFO" additivity="false">
<appender-ref ref="MonitorFILE"/>
</logger>
<root level="INFO">
<appender-ref ref="stdout"/>
<appender-ref ref="logFile"/>
<appender-ref ref="errorFile"/>
<appender-ref ref="logCenter"/>
</root>
</configuration>
3 基础知识
LevelFilter:级别过滤器,根据⽇志级别进⾏过滤。如果⽇志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝⽇志。有以下⼦节点:
<level>:设置过滤级别
<onMatch>:⽤于配置符合过滤条件的操作
<onMismatch>:⽤于配置不符合过滤条件的操作
EvaluatorFilter:求值过滤器,评估、鉴别⽇志是否符合指定条件。有⼀下⼦节点:
<evaluator>:
鉴别器,常⽤的鉴别器是JaninoEventEvaluato,也是默认的鉴别器,它以任意的布尔值表达式作为求值条件,求值条件在配置⽂件解释过成功被动态编译,布尔值表达式返回true就表⽰符合过滤条件。evaluator有个⼦标签<expression>,⽤于配置求值条件。
求值表达式作⽤于当前⽇志,logback向求值表达式暴露⽇志的各种字段:
Name Type Description
event LoggingEvent与记录请求相关联的原始记录事件,下⾯所有变量都来⾃event,例如,Message()返回下
⾯"message"相同的字符串
message String⽇志的原始消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello
{}",name); "Hello {}"就是原始消息。
formatedMessage String⽇志被各式话的消息,例如,设有logger mylogger,"name"的值是"AUB",对于 mylogger.info("Hello
{}",name); "Hello Aub"就是格式化后的消息。
logger String logger 名。
loggerContext⽇志所属的logger上下⽂。
level int级别对应的整数值,所以level > INFO 是正确的表达式。
timeStamp long创建⽇志的时间戳。
marker Marker与⽇志请求相关联的Marker对象,注意“Marker”有可能为null,所以你要确保它不能是null。
mdc Map 包含创建⽇志期间的MDC所有值得map。访问⽅法是:("myKey")。()返回的是Object 不是String,要想调⽤String的⽅法就要强转,例如,
((String) ("k")).contains("val") .MDC可能为null,调⽤时注意。
throwable java.lang.Throwable如果没有异常与⽇志关联"throwable" 变量为 null. 不幸的是, "throwable" 不能被序列化。在远程系统
上永远为null,对于与位置⽆关的表达式请使⽤下⾯的变量throwableProxy
throwableProxy与⽇志事件关联的异常代理。如果没有异常与⽇志事件关联,则变量"throwableProxy" 为 null. 当异常
被关联到⽇志事件时,"throwableProxy" 在远程系统上不会为null
<onMatch>:⽤于配置符合过滤条件的操作
<onMismatch>:⽤于配置不符合过滤条件的操作
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论