配置详解

时间:2025-03-23 10:16:31
<?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>