java日志框架系列-01_基本概念

/ 默认分类 / 没有评论 / 876浏览

alt

日志框架组件

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的日志级别。

com.foo.Logger.Filter
root.Logger.Filter
Appender.Filter
DEBUG,   INFO,  WARN,  ERROR,  FATAL
com.foo logger指定日志级别则不再继承父logger的日志级别,否则继承父logger日志级别
root logger的日志级别是其他logger的兜底级别
最终还需要通过appender的级别过滤

Appender

每个logger可以指定日志级别Priority,如果没有指定则继承父logger的级别,每个logger可以绑定多个Appender,这样日志会在多个Appender进行输出, Appender有additivity属性控制是否在其他父logger的appender中重复输出日志 Appender一般会有ConsoleAppender,FileAppender,SMTPAppender这些不同的实现 每个Appender可以指定自己的过滤规则,和logger一样通过Priority指定,指定之后只会输出对应级别和高于这个级别的日志 每个Appender可以绑定一个Fomatter

alt