1 日志级别
日志记录器(Logger)的行为是分等级的。如下表所示
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR>WARN>INFO>DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,也是说大于等于的级别的日志才输出。
2 log4j2文件的配置大致结构
log4j2.xml文件的配置大致如下:
Configuration
properties
Appenders
Console
PatternLayout
File
RollingRandomAccessFile
Filters(过滤机制)
PatternLayout(控制日志信息输出格式)
Polices(控制日志何时when滚动)
Strategy(控制日志如何how滚动)
Loggers
AsyncLogger(异步日志器)
AppenderRef
Logger(同步日志器)
AppenderRef
RootLogger
AppenderRef
2.1 Configuration
Configuration:为根节点,有status和monitorInterval等多个属性
* status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制log4j2日志框架本身的日志级别,如果将stratus设置为较低的级别就会看到很多关于log4j2本身的日志,如加载log4j2配置文件的路径等信息
* monitorInterval,含义是每隔多少秒重新读取配置文件,可以不重启应用的情况下修改配置
2.2 Appenders: 输出源,用于定义日志输出的地方,log4j2支持的输出源有很多,有控制台Console、文件File、MongoDB、Flume、RollingRandomAccessFile等。
1. Console: 控制台输出源是将日志打印到控制台上,开发的时候一般都会配置,用于调试;
2. File:文件输出源,用于将日志写入到指定的文件,需要配置输入到哪个位置(如/data/applogs);
3. RollingRandomAccessFile: 该输出源也是写入到文件,不同的是不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则。这种方式更加实用,因为你不可能一直往一个文件中写,如果一直写,文件过大,打开就会卡死,也不便于查找日志。
* name: 日志器名
* fileName: 指定当前日志文件的位置和名称;
* filePattern: 指定当发生Rolling时,文件的转移和重命名规则
* SizeBasedTriggeringPolicy: 指定当文件体积大于size指定的值时,触发Rolling,生成一个新的日志文件;
* DefaultRolloverStrategy: 指定最多保存的文件个数,默认是9;
* TimeBasedTriggeringPolicy: 与filePattern结合使用,比如filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”、TimeBasedTriggeringPolicy的interval=1,则表示每天生成一个文件,若filePattern改成{yyyyMMddHHmm},则每分钟生成一个文件;
2.4 Filters:可以配置一系列的过滤器
Log4j2的onMatch和onMismatch属性值详解如下:
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL;
分别介绍这两个配置项的三个属性值: -
--------------------
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的 -
--------------------
2.5 PatternLayout
* charset ##指定字符集
* pattern ##指定格式
* alwaysWriteExceptions ##默认为true,输出异常
* header ##可选项。包含在每个日志文件的顶部
* footer ##可选项。包含在每个日志文件的尾部。
2.5.1 pattern属性参数格式描述
######### 常见参数 #########
%c{参数} 或 %logger{参数} ##输出日志名称
%C{参数} 或 %class{参数 ##输出类型
%d{参数}{时区te{参数}{时区} ##输出时间
%F|%file ##输出文件名
highlight{pattern}{style} ##高亮显示
%l ##输出错误的完整位置
%L ##输出错误行号
%m 或 %msg 或 %message ##输出错误信息
%M 或 %method ##输出方法名
%n ##输出换行符
%level{参数1}{参数2}{参数3} ##输出日志的级别
%t 或 %thread ##创建logging事件的线程名
*/
######### 特殊符号 ############
#有些特殊符号不能直接打印,需要使用实体名称或者编号
//
& —— & 或者 &
< —— < 或者 <
> —— > 或者 >
“ —— " 或者 "
‘ —— ' 或者 '
*/
######## pattern对齐修饰 ##########
// 对齐修饰,可以指定信息的输出格式,如是否左对齐,是否留空格等。
## 编写格式为在任何pattern和%之间加入一个小数,可以是正数,也可以是负数。
## 整数表示右对齐,负数表示左对齐;
## 整数位表示输出信息的最小n个字符,如果输出信息不够n个字符,将用空格补齐;
## 小数位表示输出信息的最大字符数,如果超过n个字符,则只保留最后n个字符的信息
## (注意:保留的是后20个字符,而不是前20个字符)
*/
#示例如下
%20 —— 右对齐,不足20个字符则在信息前面用空格补足,超过20个字符则保留原信息
%-20 —— 左对齐,不足20个字符则在信息后面用空格补足,超过20个字符则保留原信息
%.30 —— 如果信息超过30个字符,则只保留最后30个字符
%20.30 —— 右对齐,不足20个字符则在信息前面用空格补足,超过30个字符则只保留最后30个字符
%-20.30 —— 左对齐,不足20个字符则在信息后面用空格补足,超过30个字符则只保留最后30个字符
2.6 Loggers:日志器,分为跟日志器Root和自定义日志器自定义时需要指定每个Logger的名称name(对于命名可以以包名作为日志的名字,不同的包配置不同的级别等),日志级别level,相加性additivity(是否继承下面配置的日志器), 对于一般的日志器(如Console、File、RollingRandomAccessFile)一般需要配置一个或多个输出源AppenderRef; 每个logger可以指定一个level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定时level默认为ERROR
additivity指定是否同时输出log到父类的appender,缺省为true。
log4j.xml配置样例
name="rootAppender" fileName="${LOG_HOME}/root.log" filePattern="${LOG_HOME}/root_%d{yyyyMMdd}.log">
name="apiBizAppender" fileName="${LOG_HOME}/apibiz.log" filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”>
name="apiSysAppender" fileName="${LOG_HOME}/apisys.log" filePattern="${LOG_HOME}/apisys_%d{yyyyMMdd}.log">
name="apiErrAppender" fileName="${LOG_HOME}/syserror.log" filePattern="${LOG_HOME}/syserror_%d{yyyyMMdd}.log">
name="apiQueryAppender" fileName="${LOG_HOME}/query.log" filePattern="${LOG_HOME}/query_%d{yyyyMMdd}.log">
name="serviceQueryAppender" fileName="${LOG_HOME}/servicelogs/query.log" filePattern="${LOG_HOME}/servicelogs/query.log_%d{yyyyMMdd}.log”>
name="serviceErrorAppender" fileName="${LOG_HOME}/servicelogs/error.log" filePattern="${LOG_HOME}/servicelogs/error.log_%d{yyyyMMdd}.log">
//按如上配置生产的日志格式样例
相关jar包配置样例