log4j2 学习 -总览andFilter

原创
2017/12/20 18:07
阅读数 1.1K

本文参考   绿色记忆:log4j学习笔记

                log4j2官方文档

前置知识:

1.日志等级分为8级 ;fatal 致命的 、error错误 、warn 警告 、 info 一般信息 、debug 调试信息  、trace 跟踪信息、all 全部、  off 关闭

2、log4j2为多线程提供了ThreadContext存储不同线程的数据,ThreadContext是一个currenthashmap实现

3、提供了多种预制关键字可以通过${关键字:key} 的方式取值

 

    log4j2作为一款日志框架,在常用功能上主要提供了一下几个方面

  1. 自动搜索配置功能
  2. 自动检测配置变更功能
  3. 监控日志框架本身运行
  4. 多种方式过滤指定日志
  5. 指定输出格式和输出目标
<Configuration status="debug"   monitorInterval ="30" >
<!--  入口过滤,直接按照指定等级过滤,符合走onMatch 不符合走onMisMatch -->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
 <Appenders>
     <!-- 输出源为文件,文件按照50M一份的方式拆分 -->
    <RollingRandomAccessFile name="file" fileName="1.log"/>
       <SizeBasedTriggeringPolicy size="50 MB"/>
      <PatternLayout>
        <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
      </PatternLayout>
    </RollingRandomAccessFile>
     <!-- 输出源为控制台 使用system.out方式打印 -->
  <Console name="out" targert = "SYSTEM_OUT">
     <PatternLayout>
       <Pattern>%highlight{%level %d{yyyy-MM-dd HH:mm:ss} %l }%n </Pattern>
  </Console>
    <Loggers>
        <!--
        日志采集器 :可以分配多个日志采集器
        每个日志采集器有:
        name:当前日志采集器的生效范围
        level:当前采集器的日志等级
        additivity:true/false 日志是否向父级收集器继续传递
        -->
     <Logger name="com.swt.basics" level="error" additivity="false">
            <AppenderRef ref="out"/>
     </Logger>
    <Logger name="com.swt.basics.log" level="info" additivity="ture">
            <AppenderRef ref="file"/>
    </Logger>
        <Root>
        <!--必须项,在显示配置的情况下会自动配置-->
            <AppenderRef ref="out"/>
        </Root>
    </Loggers>
 </Appenders>
  
  

这个xml配置文件基本上拥有了一个日志系统的基本配置,下面通过各个标签来系统的了解下log4j2提供的功能。

      Configuration标签 

        属性    status:这个属性用于配置日志框架本身的日志信息追踪,在不配置的情况下默认为error等级

                    monitorInterval :指定多久扫描监控配置文件更改,单位为秒

        Filter标签

      过滤器标签,该标签可以配置在四个位置:

  •  和appender、Logger平级;属于全局过滤将所有的日志信息按条件过滤
  • Logger内部 ;过滤当前日志收集器收集的内容
  • appender内部;过滤当前输出源需输出的内容
  • appenderRef:过滤当前收集器的指定输出源输出的内容

log4j2提供的filter

中间值过滤: LevelRangeFilter  属性【 minLevel 最大等级  maxLevel:最大等级 】,处于两等级间的执行onMatch 不在两等级之间的执行 onMismatch ,分级方式为fatal等级最小,trace等级最大

入口过滤: ThresholdFilter 简单易用,直接按照指定等级过滤是否放行

时间过滤:TimeFilter start起始时间 end 结束时间 timezone 时区 (以电脑为基准,基本不需要配置)

ScriptFilter 脚本过滤 ,支持使用脚本的方式过滤 需要先通过script指定脚本

mapFilter 多条键值对配合输出 ,可以对多条输出语句进行校验 与Message接口配合使用

StructuredDataFilter:与map过滤器相似

多线程处理

DynamicThresholdFilter 动态筛选是否取用该线程的日志,需要与ThreadContext配置使用  key:存入Thread中的键 defaultThreshold 默认筛选级别 KeyValuePair [] 可以在默认级别之外单独制定级别

ThreadContextMapFilter 控制文件的记录内容,符合条件才记录到文件,其他都拒绝写入日志

markerFilter 标记过滤器 marker 指定标记,只有标记了这个标记以及标记的父类才能被onMatch接收

RegexFilter 正则过滤器 regex 正则表达式 useRawMsg 是否与格式化后的消息进行比较  

    

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部