當我們在配置文件中指定一些控制時:
我們可以指定哪些模塊下的類進行怎樣格式規則的輸出,是不是聽起來很彆扭,見如下配置, 我們用相應<logger>標籤來指定相應<appender>模塊的日誌規則,<appender>標籤裏面的filter是用來控制日誌輸出的最低與最高級別,<root>標籤頁可以統一配置一些<appender>模塊的日誌輸出級別,但是優先級沒有其中filter高,見下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appendername="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
</filter>
</appender>
<appender name="FILE-ALL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/item-center.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="WARN" />
</filter>
</appender>
<appender name="FILE-ALL-ERROR" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/item-center.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M(%F:%L)] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
</filter>
</appender>
<appender name="FILE-BUSSINESS" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/itemcenter-bussiness.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
</filter>
</appender>
<appender name="FILE-SQL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/itemcenter-sql.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
</filter>
</appender>
<appender name="iBatis" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=item-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="ERROR" />
</filter>
</appender>
<appender name="TRADE-TIME-TRACE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/trade-time-trace-item.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss.SSS} - [%7r] - [%6p] - [%t] - [%X{sessionId}] - [%X{platformId}] - [%X{domain}] - [%X{webIp}] - [center=trade-center] - [%X{centerIp}] - [%C:%M] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="WARN" />
</filter>
</appender>
<!-- 運維日誌監控記錄開始 -->
<appender name="REQ-MONITOR" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd" />
<param name="append" value="true" />
<param name="file" value="${log.path}/monitor_info.log" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss.SSS}] - [%6p] - [%X{X-LOGID}] - [%X{platformId}] - [%X{userID}] - [%X{sessionId}]- [%X{domain}] - [%X{webIp}] - [%X{centerIp}] - [%X{targetIp}] - [%X{responseTime}] - [%X{returnCode}] - [%X{protoType}] - [%X{jsfInfo}] - [%X{jsfParam}] - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO" />
<param name="levelMax" value="WARN" />
</filter>
</appender>
<!-- 運維日誌監控記錄結束 -->
<logger name="trade-time-trace" additivity="true">
<level value="info" />
<appender-ref ref="TRADE-TIME-TRACE"/>
</logger>
<logger name="org.apache.zookeeper" additivity="false">
<level value="ERROR" />
</logger>
<logger name="com.ibatis" additivity="false">
<level value="ERROR" />
<appender-ref ref="FILE-SQL" />
<!--<appender-ref ref="CONSOLE" />-->
</logger>
<logger name="java.sql.Connection" additivity="false">
<level value="ERROR" />
<appender-ref ref="FILE-SQL" />
<!--<appender-ref ref="CONSOLE" />-->
</logger>
<logger name="java.sql.Statement" additivity="false">
<level value="ERROR" />
<appender-ref ref="FILE-SQL" />
<!--<appender-ref ref="CONSOLE" />-->
</logger>
<logger name="java.sql.PreparedStatement" additivity="false">
<level value="ERROR" />
<appender-ref ref="FILE-SQL" />
<!--<appender-ref ref="CONSOLE" />-->
</logger>
<logger name="java.sql.ResultSet" additivity="false">
<level value="ERROR" />
<appender-ref ref="FILE-SQL" />
<!--<appender-ref ref="CONSOLE" />-->
</logger>
<logger name="org.springframework" additivity="true">
<level value="WARN" />
</logger>
<logger name="com.jd.b2b" additivity="true">
<level value="${item.log.level}" />
<appender-ref ref="FILE-BUSSINESS" />
</logger>
<logger name="ReqMonitorLogger" additivity="false">
<level value="INFO" />
<appender-ref ref="REQ-MONITOR" />
</logger>
<root>
<priority value="info" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="${log.appender}" />
<appender-ref ref="FILE-ALL-ERROR" />
<!--<appender-ref ref="CONSOLE" />-->
</root>
</log4j:configuration>
注意:我們可能在filter裏面設置了日誌的輸出級別,並且本地測試沒問題,但是發佈上線後卻不起作用,那是應爲項目啓動時類加載順序的問題,我們的web.xml中log與spring容器的加載順序應該換一下位置,解決方法如下
1、將下面位置調換位置(應該是log.xml先加載,spring後加載)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpsdfath:spring-config.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
2、將下面配置調換位置
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>/WEB-INF/conf/logback.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
------