日志框架组件
1.日志不仅能输出到控制台,还要能输出到文件,发送到网络端口
2.能够控制日志输出格式
3.能够实现日志级别区分
4.能够通过日志级别控制日志是否输出,不同的级别可以输出到不同到位置
针对以上需求,一个基本的日志框架会包含如下组件:
组件 | 用途 |
---|---|
Logger | 给用户提供日志能力的api接口,每个Logger有自己的name, 不同logger通过name构成继承关系,比如com.foo是com.foo.test的父logger,任何一个logger最终的父logger都是root logger |
LoggingEvent | 日志内容承载者,比如日志时间戳,线程ID,日志信息等属性,用户通过logger提供的info()等方法打日志,内部会把日志信息封装为LoggingEvent对象 |
Priority | 优先级,控制日志级别,通常会划分从低到高为 DEBUG,INFO,WARN,ERROR,FATAL这些级别,实际输出日志时只会输出大于等于允许级别的日志,比如允许输出WARN日志,则DEBUG和INFO级别日志不会被输出,WARN,ERROR,FATAL等会被输 |
Appender | 日志输出目的地,比如控制台,文件,邮件等不同输出目的地 |
Formatter | 控制日志格式,比如时间格式,是否输出线程ID等 |
组件关系
日志级别控制方式
logger可以指定自己的日志级别,如果没有指定则继承父logger的日志级别,同时logger会提供不同级别的打日志方法
logger指定级别的情况
比如名为com.foo的logger指定了自己的日志级别为warn,此时logger.info("test xxx")不会输出日志,会在logger自身的过滤逻辑中返回,但是logger.warn("test xxx")在logger自身的过滤逻辑中会通过,最终能否输出日志还得看Appender的级别
logger没有指定级别的情况
com.foo的logger没有指定自己的日志级别,则会继承父logger的日志级别。
Appender
每个logger可以指定日志级别Priority,如果没有指定则继承父logger的级别,每个logger可以绑定多个Appender,这样日志会在多个Appender进行输出, Appender有additivity属性控制是否在其他父logger的appender中重复输出日志 Appender一般会有ConsoleAppender,FileAppender,SMTPAppender这些不同的实现 每个Appender可以指定自己的过滤规则,和logger一样通过Priority指定,指定之后只会输出对应级别和高于这个级别的日志 每个Appender可以绑定一个Fomatter
本文由 至简 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2021/03/10 17:33