log4j日誌級別失控問題

當我們在配置文件中指定一些控制時:

我們可以指定哪些模塊下的類進行怎樣格式規則的輸出,是不是聽起來很彆扭,見如下配置, 我們用相應<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>



------

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章