Log4j 2 配置文件
跳到导航
跳到搜索
https://www.bilibili.com/video/BV1iJ411H74S?p=33
Log4j 2 默认加载 classpath 下的 log4j2.xml 文件中的配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="5">
<properties>
<property name="LOG_NAME">E:/logs</property>
</properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" />
</Console>
<File name="file" fileName="${LOG_HOME}/myfile.log">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
</File>
<RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
</RandomAccessFile>
<RollingFile name="rollingFile" fileName="${LOG_HOME}/myrolling.log"
filePattern="E:/logs/$${date:yyyy-MM-dd}/myrolllog-%d{yyyy-MM-dd-HH-mm}-%i.log">
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
<Policies>
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10MB" />
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
Configuration 中的 status 指定日志框架本身的日志输出级别
修改 Configuration 中 status 的值
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" monitorInterval="5">
……
</Configuration>
其他不变,运行 Log4j2Test.testQuick 控制台观察日志记录:
2023-02-28 11:38:55,053 main DEBUG Apache Log4j Core 2.11.1 initializing configuration XmlConfiguration[location=E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml]
2023-02-28 11:38:55,056 main DEBUG Installed 1 script engine
2023-02-28 11:38:55,315 main DEBUG Oracle Nashorn version: 1.8.0_101, language: ECMAScript, threading: Not Thread Safe, compile: true, names: [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript], factory class: jdk.nashorn.api.scripting.NashornScriptEngineFactory
2023-02-28 11:38:55,316 main DEBUG PluginManager 'Core' found 117 plugins
2023-02-28 11:38:55,316 main DEBUG PluginManager 'Level' found 0 plugins
2023-02-28 11:38:55,319 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2023-02-28 11:38:55,325 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2023-02-28 11:38:55,331 main DEBUG createProperty(name="LOG_NAME", value="E:/logs")
2023-02-28 11:38:55,331 main DEBUG Building Plugin[name=properties, class=org.apache.logging.log4j.core.config.PropertiesPlugin].
2023-02-28 11:38:55,335 main DEBUG configureSubstitutor(={LOG_NAME=E:/logs}, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml))
2023-02-28 11:38:55,335 main DEBUG PluginManager 'Lookup' found 13 plugins
2023-02-28 11:38:55,336 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2023-02-28 11:38:55,340 main DEBUG PatternLayout$Builder(pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n", PatternSelector=null, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2023-02-28 11:38:55,341 main DEBUG PluginManager 'Converter' found 44 plugins
2023-02-28 11:38:55,341 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2023-02-28 11:38:55,346 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n), name="Console", Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Filter=null)
2023-02-28 11:38:55,347 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2023-02-28 11:38:55,348 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2023-02-28 11:38:55,348 main DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n", PatternSelector=null, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2023-02-28 11:38:55,349 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender].
2023-02-28 11:38:55,351 main DEBUG FileAppender$Builder(fileName="${LOG_HOME}/myfile.log", append="null", locking="null", advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n), name="file", Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Filter=null)
2023-02-28 11:38:55,353 main DEBUG Starting FileManager ${LOG_HOME}/myfile.log
2023-02-28 11:38:55,354 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2023-02-28 11:38:55,355 main DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n", PatternSelector=null, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2023-02-28 11:38:55,355 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RandomAccessFileAppender].
2023-02-28 11:38:55,356 main DEBUG RandomAccessFileAppender$Builder(fileName="${LOG_HOME}/myAcclog.log", append="null", advertise="null", advertiseURI="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n), name="accessFile", Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Filter=null)
2023-02-28 11:38:55,358 main DEBUG Starting RandomAccessFileManager ${LOG_HOME}/myAcclog.log
2023-02-28 11:38:55,359 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2023-02-28 11:38:55,360 main DEBUG createFilter(level="DEBUG", onMatch="ACCEPT", onMismatch="DENY")
2023-02-28 11:38:55,361 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2023-02-28 11:38:55,361 main DEBUG PatternLayout$Builder(pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n", PatternSelector=null, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2023-02-28 11:38:55,362 main DEBUG Building Plugin[name=OnStartupTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy].
2023-02-28 11:38:55,363 main DEBUG createPolicy(minSize="1")
2023-02-28 11:38:55,366 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2023-02-28 11:38:55,366 main DEBUG createPolicy(size="10MB")
2023-02-28 11:38:55,367 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2023-02-28 11:38:55,368 main DEBUG TimeBasedTriggeringPolicy$Builder(interval="null", modulate="null", maxRandomDelay="null")
2023-02-28 11:38:55,368 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2023-02-28 11:38:55,368 main DEBUG createPolicy(={OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=10485760), TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)})
2023-02-28 11:38:55,368 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2023-02-28 11:38:55,370 main DEBUG DefaultRolloverStrategy$Builder(max="30", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="null", tempCompressedFilePattern="null", Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml))
2023-02-28 11:38:55,370 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2023-02-28 11:38:55,372 main DEBUG RollingFileAppender$Builder(fileName="${LOG_HOME}/myrolling.log", filePattern="E:/logs/${date:yyyy-MM-dd}/myrolllog-%d{yyyy-MM-dd-HH-mm}-%i.log", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=10485760), TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=30, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", filePermissions="null", fileOwner="null", fileGroup="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout([%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n), name="rollingFile", Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), ThresholdFilter(DEBUG))
2023-02-28 11:38:55,374 main DEBUG Starting RollingFileManager ${LOG_HOME}/myrolling.log
2023-02-28 11:38:55,375 main DEBUG PluginManager 'FileConverter' found 2 plugins
2023-02-28 11:38:55,382 main DEBUG Setting prev file time to 2023-02-28T11:17:14.937+0800
2023-02-28 11:38:55,383 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[OnStartupTriggeringPolicy, SizeBasedTriggeringPolicy(size=10485760), TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false)])
2023-02-28 11:38:55,384 main DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2023-02-28 11:38:55,384 main DEBUG createAppenders(={Console, file, accessFile, rollingFile})
2023-02-28 11:38:55,384 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2023-02-28 11:38:55,385 main DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2023-02-28 11:38:55,385 main DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2023-02-28 11:38:55,385 main DEBUG createLogger(additivity="null", level="TRACE", includeLocation="null", ={Console}, ={}, Configuration(E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml), Filter=null)
2023-02-28 11:38:55,386 main DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2023-02-28 11:38:55,387 main DEBUG createLoggers(={root})
2023-02-28 11:38:55,387 main DEBUG Configuration XmlConfiguration[location=E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml] initialized
2023-02-28 11:38:55,387 main DEBUG Starting configuration XmlConfiguration[location=E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml]
2023-02-28 11:38:55,388 main DEBUG Log4j2 ConfigurationScheduler starting 1 threads
2023-02-28 11:38:55,389 main DEBUG Started configuration XmlConfiguration[location=E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml] OK.
2023-02-28 11:38:55,390 main DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2023-02-28 11:38:55,390 main DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2023-02-28 11:38:55,390 main DEBUG Appender DefaultConsole-1 stopped with status true
2023-02-28 11:38:55,390 main DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@1ae369b7 OK
2023-02-28 11:38:55,417 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2
2023-02-28 11:38:55,418 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger
2023-02-28 11:38:55,419 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector
2023-02-28 11:38:55,420 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=
2023-02-28 11:38:55,420 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console
2023-02-28 11:38:55,421 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=file
2023-02-28 11:38:55,421 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=rollingFile
2023-02-28 11:38:55,421 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=accessFile
2023-02-28 11:38:55,422 main DEBUG org.apache.logging.log4j.core.util.SystemClock does not support precise timestamps.
2023-02-28 11:38:55,422 main DEBUG Reconfiguration complete for context[name=18b4aac2] at URI E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@4a668b6e) with optional ClassLoader: null
2023-02-28 11:38:55,422 main DEBUG Shutdown hook enabled. Registering a new one.
2023-02-28 11:38:55,423 main DEBUG LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4a668b6e] started OK.
11:38:55.426 [main] [FATAL] io.github.jihch.Log4j2Test:17 --- fatal
11:38:55.429 [main] [ERROR] io.github.jihch.Log4j2Test:18 --- error
11:38:55.429 [main] [WARN ] io.github.jihch.Log4j2Test:19 --- warn
11:38:55.429 [main] [INFO ] io.github.jihch.Log4j2Test:20 --- info
11:38:55.429 [main] [DEBUG] io.github.jihch.Log4j2Test:21 --- debug
11:38:55.429 [main] [TRACE] io.github.jihch.Log4j2Test:22 --- trace
2023-02-28 11:38:55,430 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4a668b6e]
2023-02-28 11:38:55,431 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4a668b6e]...
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG Shutting down RandomAccessFileManager ${LOG_HOME}/myAcclog.log
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG Shut down RandomAccessFileManager ${LOG_HOME}/myAcclog.log, all resources released: true
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG Appender accessFile stopped with status true
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG Shutting down RollingFileManager ${LOG_HOME}/myrolling.log
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG Shutting down RollingFileManager ${LOG_HOME}/myrolling.log
2023-02-28 11:38:55,432 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Shut down RollingFileManager ${LOG_HOME}/myrolling.log, all resources released: true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Appender rollingFile stopped with status true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Shutting down FileManager ${LOG_HOME}/myfile.log
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Shut down FileManager ${LOG_HOME}/myfile.log, all resources released: true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Appender file stopped with status true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false, all resources released: true
2023-02-28 11:38:55,433 pool-1-thread-1 DEBUG Appender Console stopped with status true
2023-02-28 11:38:55,434 pool-1-thread-1 DEBUG Log4j2 ConfigurationScheduler shutting down threads in java.util.concurrent.ScheduledThreadPoolExecutor@259ad000[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 0]
2023-02-28 11:38:55,434 pool-1-thread-1 DEBUG Stopped XmlConfiguration[location=E:\record\2023\2\27\log4j2-demo\target\classes\log4j2.xml] OK
2023-02-28 11:38:55,434 pool-1-thread-1 DEBUG Stopped LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4a668b6e] with status true
Process finished with exit code 0
Configuration 中的 monitorInterval 自动加载配置文件的间隔时间
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug" monitorInterval="5">
……
</Configuration>
monitorInterval 指定自动加载配置文件的间隔时间,单位:秒,生产环境中动态调整日志输出级别无需重启应用
其它
<?xml version="1.0" encoding="UTF-8"?>
<!--
status="warn" 日志框架本身的日志输出级别
monitorInterval="5" 自动加载配置文件的间隔时间,不低于 5 秒
-->
<Configuration status="debug" monitorInterval="5">
<!--
集中配置属性进行管理
使用时通过:${name}
-->
<properties>
<property name="LOG_NAME">E:/logs</property>
</properties>
<!-- 日志处理 -->
<Appenders>
<!--
控制台输出 appender
target="SYSTEM_OUT" 或 target="SYSTEM_ERR"
-->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] [%-5level] %c{36}:%L --- %m%n" />
</Console>
<!-- 日志文件输出的 appender -->
<File name="file" fileName="${LOG_HOME}/myfile.log">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
</File>
<!-- 使用随机读写流的日志文件输出 appender,性能提高 -->
<RandomAccessFile name="accessFile" fileName="${LOG_HOME}/myAcclog.log">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
</RandomAccessFile>
<!-- 按照一定规则拆分日志文件的 appender -->
<RollingFile name="rollingFile" fileName="${LOG_HOME}/myrolling.log"
filePattern="/logs/$${date:yyyy-MM-dd}/myrolllog-%d{yyyy-MM-dd-HH-mm}-%i.log">
<!-- 日志级别过滤器 -->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
<!-- 日志消息格式 -->
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-5level] %l %c{36} - %m%n" />
<Policies>
<!-- 在系统启动时,触发拆分规则,生成一个新的日志文件 -->
<OnStartupTriggeringPolicy />
<!-- 按照文件大小拆分,10MB -->
<SizeBasedTriggeringPolicy size="10MB" />
<!-- 按照 filePattern 定义的时间节点规则进行拆分 -->
<TimeBasedTriggeringPolicy />
</Policies>
<!-- 在同一个目录下,文件的个数限定为 30 个,超过按照时间规则滚动覆盖-->
<DefaultRolloverStrategy max="30"/>
</RollingFile>
</Appenders>
<!-- logger 定义 -->
<Loggers>
<!-- 使用 rootLogger 配置日志级别 level="trace" -->
<Root level="trace">
<!-- 指定 logger 使用的 appender -->
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>