配置详解
<?xml version="1.0" encoding="UTF-8"?>
<!-- status=debug 可以查看log4j的装配过程 -->
<configuration status="off" monitorInterval="300">
<properties>
<property name="LOG_HOME">/Users/td/Documents/Tools/apache-tomcat-8.5.4/bin/devLog</property>
<property name="BACKUP_HOME">{LOG_HOME}/backup</property>
<property name="SERVER_NAME">fingerprint</property>
</properties>
<appenders>
<!-- 定义控制台输出 -->
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="[fingerprint-console] %date{yyyy-MM-dd HH:mm:} %level [%thread][%file:%line] - %msg%n" />
</Console >
<!-- 程序员调试日志 -->
<RollingRandomAccessFile name="DevLog" append="true"
fileName="${LOG_HOME}/${SERVER_NAME}"
filePattern="${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout pattern="[fingerprint] %date{yyyy-MM-dd HH:mm:} %level [%thread][%file:%line] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
<!-- 失败数据日志 -->
<RollingRandomAccessFile name="ErrorData" append="true"
fileName="${LOG_HOME}/ErrorData/${SERVER_NAME}"
filePattern="${LOG_HOME}/ErrorData/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:} - %msg%n" />
<Policies>
<!-- TimeBased Triggering Policy
基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,
比如上面的filePattern中的yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。
比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,
之后的封存时间依次为08:00,12:00,16:00,。。。-->
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
<!-- 无法解析数据日志 -->
<RollingRandomAccessFile name="UnparseData" append="true"
fileName="${LOG_HOME}/UnparseData/${SERVER_NAME}"
filePattern="${LOG_HOME}/UnparseData/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:} - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
<!-- KafkaConsumer日志数据 -->
<RollingRandomAccessFile name="KafkaConsumer" append="true"
fileName="${LOG_HOME}/KafkaConsumer/${SERVER_NAME}"
filePattern="${LOG_HOME}/KafkaConsumer/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:} - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
</appenders>
<loggers>
<!-- 3rdparty Loggers -->
<logger name="slf4j2" level="ERROR" />
<logger name="" level="ERROR" />
<logger name="" level="ERROR" />
<logger name="" level="ERROR" />
<logger name="" level="ERROR" />
<logger name="" level="${}" />
<logger name="" level="ERROR" />
<logger name=".v2" level="ERROR" />
<logger name="" level="ERROR" />
<logger name="" level="${}" />
<!--收集下面logger标签的数据流日志的。logger的additivity属性要设置为true,这样才能打印在root的appender中 -->
<!--一些没有定义的logger的name也会输出在root的appender文件下。比如:
public static final Logger unparseLogger = ("");
类的包名没有定义<logger name> 那么他就会在输出在root下的appender
-->
<root level="debug">
<appender-ref ref="DevLog" />
<appender-ref ref="Console" />
</root>
<logger name="" level="info">
<appender-ref ref="ErrorData" />
</logger>
<!--由public static final Logger unparseLogger = ("UnparseData");
定义日志级别大于info的, info/warn/ERROR/FATAL会被输出到下面的appender。
-->
<logger name="UnparseData" level="info" additivity="false">
<appender-ref ref="UnparseData" />
</logger>
<!--public static final Logger KafkaConsumerLogger = ("");
MyKafkaConsumer的类名为输出时就会输出到下面appender中-->
<logger name="" level="debug" additivity="false">
<appender-ref ref="KafkaConsumer"/>
</logger>
</loggers>
</configuration>