名词解释
Loggers节点,常见的有两种:Root和Logger。
Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
Root:每个配置都必须有一个根记录器Root。如果未配置,则将使用默认根LoggerConfig,其级别为ERROR且附加了Console appender。根记录器和其他记录器之间的主要区别是:1.根记录器没有name属性。2.根记录器不支持additivity属性,因为它没有父级。
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.
Logger:Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
使用Logger元素必须有一个name属性,root logger不用name元属性
每个Logger可以使用TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF之一配置级别。如果未指定级别,则默认为ERROR。可以为additivity属性分配值true或false。如果省略该属性,则将使用默认值true。
Logger还可以配置一个或多个AppenderRef属性。引用的每个appender将与指定的Logger关联。如果在Logger上配置了多个appender,则在处理日志记录事件时会调用每个appender。
-
name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。一般是项目包名或者框架的包名,比如:com.jourwon,org.springframework
-
level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF
-
AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root。如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
Appenders:是输出源,用于定义日志输出的地方。log4j2支持的输出源有很多,有控制台ConsoleAppender、文件FileAppender、AsyncAppender、RandomAccessFileAppender、RollingFileAppender、RollingRandomAccessFile 等 常见的有:
ConsoleAppender
控制台输出源是将日志打印到控制台上,开发的时候一般都会配置,以便调试。
name:指定Appender的名字。
target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
PatternLayout:输出格式,不设置默认为:%m%n。
AsyncAppender
异步输出。AsyncAppender接受对其他Appender的引用,并使LogEvents在单独的Thread上写入它们。
默认情况下,AsyncAppender使用 java.util.concurrent.ArrayBlockingQueue ,它不需要任何外部库。请注意,多线程应用程序在使用此appender时应小心:阻塞队列容易受到锁争用的影响,并且我们的 测试 表明,当更多线程同时记录时性能可能会变差。考虑使用无锁异步记录器以获得最佳性能。
FileAppender
文件输出源,用于将日志写入到指定的文件,其底层是一个OutputStreamAppender,需要配置输入到哪个位置(例如:D:/logs/mylog.log)
name:指定Appender的名字。
fileName:指定输出日志的目的文件带全路径的文件名。
PatternLayout:输出格式,不设置默认为:%m%n。
RollingFileAppender
RollingFileAppender是一个OutputStreamAppender,它写入fileName参数中指定的File,并根据TriggeringPolicy和RolloverPolicy滚动文件。
RollingFileAppender是一个OutputStreamAppender,它写入fileName参数中指定的File,并根据TriggeringPolicy和RolloverPolicy滚动文件。
RollingRandomAccessFile: 该输出源也是写入到文件,不同的是比File更加强大,可以指定当文件达到一定大小(如20MB)时,另起一个文件继续写入日志,另起一个文件就涉及到新文件的名字命名规则,因此需要配置文件命名规则。这种方式更加实用,因为你不可能一直往一个文件中写,如果一直写,文件过大,打开就会卡死,也不便于查找日志。
- name:指定Appender的名字。
- fileName 指定当前日志文件的位置和文件名称
- filePattern 指定当发生Rolling时,文件的转移和重命名规则
- immediateFlush 设置为true时 - 默认值,每次写入后都会进行刷新。这将保证数据写入磁盘,但可能会影响性能。
- bufferSize 缓冲区大小,默认为262,144字节(256 * 1024)。
- Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。
- SizeBasedTriggeringPolicy 指定当文件大小大于size指定的值时,触发Rolling
- TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用,日期格式精确到哪一位,interval也精确到哪一个单位。注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm-ss}-%i,最小的时间粒度是ss,即秒钟。TimeBasedTriggeringPolicy默认的size是1,结合起来就是每1秒钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件
- DefaultRolloverStrategy 指定最多保存的文件个数