1. 程式人生 > >log4j.xml中如何只輸出log.debug

log4j.xml中如何只輸出log.debug

背景:最近和其他專案聯調,需要證明我方傳送的資訊是正確的,需要打印出debug日誌。但是預設的debug列印的 帶了很多的jar包的資訊,還有很多的sql,這些目前是用不到了,所以可以的話,在聯調的時候遮蔽掉。

原理:因為jar等的資訊多餘,所以,對此類資訊進行篩選,使得自己的log.debug資訊能夠清晰展現。

具體如下:

一般的log4j有用propeties檔案的,也有用xml的,我用的是後者,並且列印到控制檯而不是檔案。(列印到檔案的可見底部連結)

原檔案如下:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %m%n" />
		</layout> <!--限制輸出級別從高到低: OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL-->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="OFF" />
		</filter>
	</appender>
   
	<root>
		<appender-ref ref="CONSOLE" />
	</root>
</log4j:configuration>

修改後檔案如下:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %m%n" />
		</layout> <!--限制輸出級別從高到低: OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL-->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="OFF" />
<!-- 			<param name="AcceptOnMatch" value="true" /> -->
		</filter>
	</appender>
	<!-- 不列印指定的日誌,如org.framexxxx -->
	<logger name="org" additivity="false">
      <level value="WARN" />
      <appender-ref ref="ORG-LOCAL" />
   </logger>
   <logger name="net" additivity="false">
      <level value="WARN" />
      <appender-ref ref="NET-LOCAL" />
   </logger>
   
	<root>
<!-- 		<priority value="INFO" /> -->
		<appender-ref ref="CONSOLE" />
		<appender-ref ref="ORG-LOCAL" />
		<appender-ref ref="NET-LOCAL" />
	</root>
</log4j:configuration>

其中關鍵logger:name=“org”即可以指定不列印org下所有org.xxx普通的資訊,而只打印warn以上的資訊。(也可以設org.fremework.xxx,這樣會列印除org.framework.除外的資訊,根據“.”來設定具體的級別)

另外,注意不要設定root中的優先順序priority。設定了的話,即便你在上方的levelMIN中設定了debug,會導致無法打debug資訊。

學習連結: