log4j--分包輸出日誌

最近由於業務上出現一些莫名其妙的誤刪除數據,今天研究了下log4j分包輸出,想用log4j來記錄具體哪些數據被誤刪除了。

具體做法是:新建一個包,然後再包下建一個新class,然後在class裏面記錄被刪除的數據,在log4j.xml裏配置指向此新包的輸出文件。


在test工程下實驗了一下:

log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

	<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} %-5p [%t]  %c{1} : %L - %m%n"/>
    </layout>	    
	</appender>
	
	<appender name="File" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="D:/log4j/test.log"/>
		<param name="MaxFileSize" value="1MB"/>
		<param name="MaxBackupIndex" value="10"/>
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n"/>
		</layout>
	</appender>
	
	<appender name="File1" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="D:/log4j/test1.log"/>
		<param name="MaxFileSize" value="1MB"/>
		<param name="MaxBackupIndex" value="10"/>
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n"/>
		</layout>
	</appender>

  <logger name="org">
    <level value="WARN"/>
  </logger>
  <logger name="org.apache">
    <level value="WARN"/>
  </logger>
  <logger name="com.zznode.log">
    <level value="DEBUG"/>  
  </logger>
  <logger name="com.zznode.test">
    <level value="DEBUG"/>
    <appender-ref ref="File1" />
  </logger>
  <logger name="rule">
    <level value="INFO"/>
  </logger>
  <logger name="org.springframework.jdbc.core">
    <level value="info"/>
  </logger>
  
	<root>
		<level value ="DEBUG" />
		<appender-ref ref="Console" />
		<appender-ref ref="File" />
	</root>

</log4j:configuration>


Main方法:

package com.zznode.log;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

import com.zznode.test.Test;

/**
 * @desc:
 * @since Nov 8, 2012
 * @author chaisson 
 *
 * <p>
 */
public class Log4jApp {
	
	public void printLog() {
		Logger log = Logger.getLogger(Log4jApp.class.getClass());
		log.info("測試info");
		log.debug("測試debug");
		log.error("測試error");
	}
	
	 public static void main(String[] args) {

	       DOMConfigurator.configure("D:/workspace/Test/log4j.xml");
		   //PropertyConfigurator.configure("D:/workspace/Test/log4j.properties");  

	       Log4jApp app = new Log4jApp();
	       app.printLog();
	       
	       Test test = new Test();
	       test.printLog();
	   }
}

工程結構:


輸出結果:


其中Eclipse 的Console:

14:41:43,858  INFO Class:27 - 測試info
  14:41:43,860 DEBUG Class:28 - 測試debug
  14:41:43,860 ERROR Class:29 - 測試error
  14:41:43,861 DEBUG Test:17 - Test.java debug
  14:41:43,861  INFO Test:18 - Test.java info

test.log:

2012-11-08 14:41:43.858 INFO  [main] Class - 測試info
  2012-11-08 14:41:43.860 DEBUG [main] Class - 測試debug
  2012-11-08 14:41:43.860 ERROR [main] Class - 測試error
  2012-11-08 14:41:43.861 DEBUG [main] Test - Test.java debug
  2012-11-08 14:41:43.861 INFO  [main] Test - Test.java info
test1.log:

2012-11-08 14:41:43.861 DEBUG [main] Test - Test.java debug
  2012-11-08 14:41:43.861 INFO  [main] Test - Test.java info

我們發現 test.log 中還包含有test1.log中打印的內容,實際上test包路徑下面打印了2次,這時我們可以通過配置 additivity="false",讓此包路徑下面的日誌只打印一次。

  <logger name="com.zznode.test" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="File1" />
  </logger>
再次測試,的確有效!

這樣目的就達到了,把log4j.xml改爲log4j.properties,效果是一樣的,配置如下:

### set log levels ###  
log4j.rootLogger = debug,stdout,File  
log4j.logger.com.zznode.test=debug,File1
  
log4j.appender.stdout = org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.Target = System.out  
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{1}:%L - %m%n  
  
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.File.File = D:/log4j/test.log  
log4j.appender.File.Append = true  
log4j.appender.File.Threshold = DEBUG
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n  
  
log4j.appender.File1 = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.File1.File = D:/log4j/test1.log 
log4j.appender.File1.Append = true  
log4j.appender.File1.Threshold = DEBUG 
log4j.appender.File1.layout = org.apache.log4j.PatternLayout  
log4j.appender.File1.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%t] %c{1} - %m%n  





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