本文参考
前置知识:
1.日志等级分为8级 ;fatal 致命的 、error错误 、warn 警告 、 info 一般信息 、debug 调试信息 、trace 跟踪信息、all 全部、 off 关闭
2、log4j2为多线程提供了ThreadContext存储不同线程的数据,ThreadContext是一个currenthashmap实现
3、提供了多种预制关键字可以通过${关键字:key} 的方式取值
log4j2作为一款日志框架,在常用功能上主要提供了一下几个方面
- 自动搜索配置功能
- 自动检测配置变更功能
- 监控日志框架本身运行
- 多种方式过滤指定日志
- 指定输出格式和输出目标
%d %p %c{1.} [%t] %m %ex%n %highlight{%level %d{yyyy-MM-dd HH:mm:ss} %l }%n
这个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 是否与格式化后的消息进行比较