log4j2的异步使用及添加自定义参数

时间:2025-03-23 07:44:49
<?xml version="1.0" encoding="UTF-8"?> <!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!-- monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="WARN"> <Properties> <!--常用变量配置 供下文中使用--> <property name="APP_NAME">项目名称</property> <property name="LOGGER_LEVEL">INFO</property> <!--日志路径 对应服务器路径--> <property name="LOGGER_PATH">/data/logs</property> <Property name="LOG_HOME">${LOGGER_PATH}/${APP_NAME}</Property> <!--文件大小--> <Property name="FILE_SIZE">10M</Property> <!--日志格式--> <Property name="log_pattern">%d{yyyy-MM-dd HH:mm:} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n</Property> <!--日志文件命名格式--> <Property name="rolling_file_name">-%d{yyyy-MM-dd}.%</Property> <!--日志留存最大文件数--> <Property name="rollover_strategy_max">30</Property> <Property name="LOG_HOME_PROJECT">${LOG_HOME}/${APP_NAME}-project</Property> <Property name="LOG_HOME_PROJECT_ERROR">${LOG_HOME}/${APP_NAME}-project-error</Property> <Property name="LOG_HOME_SQL">${LOG_HOME}/${APP_NAME}-sql</Property> </Properties> <appenders> <!--控制台打印 及格式--> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="${log_pattern}" /> </Console> <!--定义rolling() 供下文使用--> <RollingRandomAccessFile name="projectRolling" fileName="${LOG_HOME_PROJECT}.log" filePattern="${LOG_HOME_PROJECT}${rolling_file_name}" immediateFlush="false" append="true"> <PatternLayout> <Pattern>${log_pattern}</Pattern> <Charset>UTF-8</Charset> </PatternLayout> <Policies> <!--滚动规则 时间或者文件大小 滚动后将按照filePattern命名--> <!--interval属性用来指定多久滚动一次,默认是1 hour--> <TimeBasedTriggeringPolicy interval="24"/> <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/> </Policies> <DefaultRolloverStrategy max="${rollover_strategy_max}" /> </RollingRandomAccessFile> <RollingRandomAccessFile name="projectErrorRolling" fileName="${LOG_HOME_PROJECT_ERROR}.log" filePattern="${LOG_HOME_PROJECT_ERROR}${rolling_file_name}" immediateFlush="false" append="true"> <Filters> <!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)可以使用多个ThresholdFilter 达到精准过滤某个级别的日志--> <ThresholdFilter level="${LOGGER_LEVEL}" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <PatternLayout> <Pattern>${log_pattern}</Pattern> <Charset>UTF-8</Charset> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/> </Policies> <DefaultRolloverStrategy max="${rollover_strategy_max}" /> </RollingRandomAccessFile> </RollingRandomAccessFile> <RollingRandomAccessFile name="sqlRolling" fileName="${LOG_HOME_SQL}.log" filePattern="${LOG_HOME_SQL}${rolling_file_name}" immediateFlush="false" append="true"> <PatternLayout> <Pattern>${log_pattern}</Pattern> <Charset>UTF-8</Charset> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="${FILE_SIZE}"/> </Policies> <DefaultRolloverStrategy max="${rollover_strategy_max}" /> </RollingRandomAccessFile> </appenders> <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。--> <loggers> <!--异步日志 区别于普通使用的logger root 搭配--> <!--name 为包名 对应配置日志输出等级level --> <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--> <!--将包下的日志打印到Console控制台,projectRolling文件,projectErrorRolling(error级别单独一个文件)--> <AsyncLogger name="" level="${LOGGER_LEVEL}" additivity="false"> <appender-ref ref="Console"/> <appender-ref ref="projectRolling"/> <appender-ref ref="projectErrorRolling"/> </AsyncLogger> <AsyncLogger name="" level="${LOGGER_LEVEL}" additivity="false"> <appender-ref ref="Console"/> <appender-ref ref="projectRolling"/> <appender-ref ref="projectErrorRolling"/> </AsyncLogger> <AsyncLogger name="" level="${LOGGER_LEVEL}" additivity="false"> <appender-ref ref="Console"/> <appender-ref ref="sqlRolling"/> </AsyncLogger> <AsyncLogger name="" level="${LOGGER_LEVEL}" additivity="false"> <appender-ref ref="Console"/> <appender-ref ref="sqlRolling"/> </AsyncLogger> <AsyncLogger name="com.项目包名" level="${LOGGER_LEVEL}" additivity="false"> <appender-ref ref="Console"/> <appender-ref ref="projectRolling"/> <appender-ref ref="projectErrorRolling"/> </AsyncLogger> <AsyncRoot level="${LOGGER_LEVEL}"> <appender-ref ref="Console"/> <appender-ref ref="projectRolling" /> <appender-ref ref="projectErrorRolling" /> </AsyncRoot> </loggers> </configuration>