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  





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值