zoukankan      html  css  js  c++  java
  • java logback 正则过滤

    1需要引用jar包

       <dependency>
                <groupId>org.codehaus.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.qos.logback.core.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.qos.logback.core.rolling.RollingFileAppender">
            <File>/opt/meituan/applog/acs/info/mt_info.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.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.qos.logback.core.rolling.RollingFileAppender">
             
            <File> /opt/logs/data_collector/metrics_acs_settlement_log/mt_logCenter.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.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.qos.logback.core.filter.EvaluatorFilter">        
              <evaluator> 
                <matcher>   
                  <Name>odd</Name>   
                  <regex>.*XMDT.*?(?=)</regex>   
                </matcher>  
                <expression>odd.matches(formattedMessage)</expression>  
              </evaluator>
              <OnMatch>ACCEPT</OnMatch>  
                <OnMismatch>DENY</OnMismatch>
              <!-- <evaluator>    
                <expression>return message.contains("abcdefghijklmn");</expression>     
              </evaluator>
              <OnMatch>ACCEPT</OnMatch>  
                <OnMismatch>DENY</OnMismatch>    -->
            </filter> 
        </appender>
        
        <!-- 采集日志 -->
        <appender name="MonitorFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>/opt/meituan/applog/acs/monitor/monitor.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.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.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.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.qos.logback.core.rolling.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.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>/opt/meituan/applog/acs/slow/%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
        </appender>
        
        <!-- 数据库访问较慢的语句 -->
        <appender name="sqlFileInfo" class="ch.qos.logback.core.rolling.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.qos.logback.core.rolling.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随时重载logback.xml或者单独设置某个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,也是默认的鉴别器,它以任意的Java布尔值表达式作为求值条件,求值条件在配置文件解释过成功被动态编译,布尔值表达式返回true就表示符合过滤条件。evaluator有个子标签<expression>,用于配置求值条件。

     

    求值表达式作用于当前日志,logback向求值表达式暴露日志的各种字段:

    NameTypeDescription
    event LoggingEvent 与记录请求相关联的原始记录事件,下面所有变量都来自event,例如,event.getMessage()返回下面"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 LoggerContextVO 日志所属的logger上下文。
    level int 级别对应的整数值,所以 level > INFO 是正确的表达式。
    timeStamp long 创建日志的时间戳。
    marker Marker 与日志请求相关联的Marker对象,注意“Marker”有可能为null,所以你要确保它不能是null。
    mdc Map 包含创建日志期间的MDC所有值得map。访问方法是:mdc.get("myKey") 。mdc.get()返回的是Object不是String,要想调用String的方法就要强转,例如,

    ((String) mdc.get("k")).contains("val") .MDC可能为null,调用时注意。

    throwable java.lang.Throwable 如果没有异常与日志关联"throwable" 变量为 null. 不幸的是, "throwable" 不能被序列化。在远程系统上永远为null,对于与位置无关的表达式请使用下面的变量throwableProxy
    throwableProxy IThrowableProxy 与日志事件关联的异常代理。如果没有异常与日志事件关联,则变量"throwableProxy" 为 null. 当异常被关联到日志事件时,"throwableProxy" 在远程系统上不会为null

     

     

    <onMatch>:用于配置符合过滤条件的操作

    <onMismatch>:用于配置不符合过滤条件的操作

  • 相关阅读:
    LintCode "Maximum Gap"
    LintCode "Wood Cut"
    LintCode "Expression Evaluation"
    LintCode "Find Peak Element II"
    LintCode "Remove Node in Binary Search Tree"
    LintCode "Delete Digits"
    LintCode "Binary Representation"
    LeetCode "Game of Life"
    LintCode "Coins in a Line"
    LintCode "Word Break"
  • 原文地址:https://www.cnblogs.com/tianzhiyun/p/6495511.html
Copyright © 2011-2022 走看看