MDC是什么?
第一次接触MDC,很蒙圈。看看导入的包import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.MDC;它显然和日志管理有关。
slf4j常用的日志接口有哪些?trace、debug、info、warn、error,再加上MDC.
最常见的日志管理会采用这种方式:
private static final Logger log = LoggerFactory.getLogger(类名.class);
log.info();
log.debug();
log.trace();
怎么为应用配置日志管理
日志的输出格式:
<property name="PATTERN">
%X{logId},[%-5level],%d{yyyy-MM-dd HH:mm:ss.SSS},%t,%c{1}: %msg%n
</property>
解析:
- %X{logId}----针对MDC.put("", "")方法。
- [%-5level]----日志的级别
- %d{yyyy-MM-dd HH:mm:ss.SSS}-----时间格式化
- %t ----- 线程
- %c{1} --- 类名
- %msg --- 消息
- %n ------换行
看配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF --> <configuration> <properties> <!-- 文件输出格式 --> <property name="PATTERN"> %X{logId},[%-5level],%d{yyyy-MM-dd HH:mm:ss.SSS},%t,%c{1}: %msg%n </property> <!-- 日志根路径 --> <property name="BASE_PATH"> /applog/xxxlog </property> <!-- 应用名 --> <property name="APP_NAME"> xxx-core </property> <!-- 日志文件名 --> <property name="LOG_FILE_NAME"> ${BASE_PATH}/${APP_NAME}.log </property> <!-- 滚动日志文件生成规则 --> <property name="LOG_FILE_PATTERN"> ${BASE_PATH}/${APP_NAME}_%d{yyyyMMddHHmm}-%i.log </property> </properties> <!-- xx报文日志级别 --> <DynamicThresholdFilter key="traceOpen" defaultThreshold="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"> <KeyValuePair key="yes" value="trace" /> </DynamicThresholdFilter> <!-- 日志输出定义 --> <appenders> <!-- 滚动日志 --> <RollingFile name="rollingFileLog" filename="${LOG_FILE_NAME}" filePattern="${LOG_FILE_PATTERN}" append="true"> <Filters> 过滤掉不符合日志级别的日志 <!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> --> 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) <!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> --> </Filters> 输出日志的格式 <PatternLayout pattern="${PATTERN}" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="20 MB" /> </Policies> 滚动日志的策略 <DefaultRolloverStrategy max="50"> <Delete basePath="${BASE_PATH}/" maxDepth="2"> <IfFileName glob="${APP_NAME}_*.log" /> <!--! 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用 另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!--> <!--7天--> <IfLastModified age="7d" /> <IfAny> <IfAccumulatedFileSize exceeds="2 GB" /> <IfAccumulatedFileCount exceeds="100" /> </IfAny> </Delete> </DefaultRolloverStrategy> </RollingFile> <!-- 控制台 --> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="${PATTERN}" /> </Console> </appenders> <!-- 日志对象定义 --> <loggers> <!-- xx日志 --> <logger name="CoreframeInteractiveLogger" level="info" additivity="true"> <AppenderRef ref="interactiveAppender" /> </logger> <!-- xx日志 --> <logger name="CoreframeServiceMetricsLogger" level="info" additivity="true"> <AppenderRef ref="serviceMetricsAppender" /> </logger> <!-- 服务框架 --> <logger name="coreframe" level="info" /> <!-- 应用处理日志 --> <logger name="Service" level="debug" /> <logger name="" level="debug" /> <!-- 测试日志 --> <logger name="test" level="trace" /> <logger name="" level="trace" /> <root level="info"> <AppenderRef ref="console" /> <AppenderRef ref="rollingFileLog" /> </root> </loggers> </configuration>