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