在出现问题之后,需要立即根据日志定位问题。对于INFO及以上级别的日志,要求按照一定顺序,输出以下必要的信息。参考日志格式定义
<PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%mdc{invokeNo}] %C{2}:%L %M - %msg%n</Pattern> </PatternLayout>
一个完整的Appender配置如下
<?xml version="1.0" encoding="UTF-8"?> <!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。 monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数。 --> <configuration status="OFF" monitorInterval=”600″> <properties> <property>/export/home/logs/yourSystem/yourAppName</property> <property>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%mdc{invokeNo}] %C{2}:%L %M - %msg%n </property> <property>3GB</property> <property>info</property> <property>20</property> <property>3</property> </properties> <!--先定义所有的appender--> <appenders> <!--输出控制台的配置--> <Console target="SYSTEM_OUT"> <!--控制台只输出level及以上级别的信息(onMatch), 其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <!--输出日志的格式--> <PatternLayout pattern="${LOG_PATTERN}"/> </Console> <!-- 打印信息,每次大小超过size, 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingRandomAccessFile immediateFlush="true" fileName="${LOG_DIR}/all.log" filePattern="${LOG_DIR}/all-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="NEUTRAL"/> <ThresholdFilter level="trace" onMatch="DENY" onMismatch="DENY"/> </Filters> <PatternLayout> <Pattern>${LOG_PATTERN}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="${EVERY_FILE_SIZE}" /> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> <!-- DefaultRolloverStrategy属性如不设置, 则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy> <!-- 最多备14 天以内||日志文件大小达到50GB的日志|| 文件数量超过20此处为策略限制,Delete中可以按自己需要用正则表达式编写 --> <Delete basePath="${LOG_DIR}" maxDepth="1"> <IfLastModified age="14d" /> <IfAccumulatedFileSize exceeds="50 GB" /> <IfAccumulatedFileCount exceeds="20" /> </Delete> </DefaultRolloverStrategy>格 </RollingRandomAccessFile> <RollingRandomAccessFile immediateFlush="true" fileName="${LOG_DIR}/all-error.log" filePattern="${LOG_DIR}/all-error-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <PatternLayout> <Pattern>${LOG_PATTERN}</Pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="${EVERY_FILE_SIZE}" /> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> <!-- DefaultRolloverStrategy属性如不设置, 则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy max="${ERROR_FILE_COUNT}"/> </RollingRandomAccessFile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--默认的root的logger--> <Logger level="info" additivity="false"> <AppenderRef ref="all" /> </Logger> <Logger level="error" additivity="false"> <AppenderRef ref="all-error" /> </Logger> <root level="${OUTPUT_LOG_LEVEL}"> <appender-ref ref="console"/> </root> </loggers> </configuration>