论坛首页 Java企业应用论坛

怎么配置log4j.properties才能将同一包中的error和debug级别的日志分别记到两个文件中去?

浏览 30634 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-29  
我的日志级别是debug,执照下面的配置,会将debug和error日志都输入到一文件中去
由于debug日志非常多,使得error日志比较难找,怎样配置才可以将com.demo.key.ftp输出的日志按级别输出到不同的文件中去呢?

log4j.logger.com.demo.key.ftp=DEBUG, file
   发表时间:2007-04-29  
没见过这种功能
关注一下
0 请登录后投票
   发表时间:2007-04-29  
ralfmmx 写道
我的日志级别是debug,执照下面的配置,会将debug和error日志都输入到一文件中去
由于debug日志非常多,使得error日志比较难找,怎样配置才可以将com.demo.key.ftp输出的日志按级别输出到不同的文件中去呢?

log4j.logger.com.demo.key.ftp=DEBUG, file


我觉得要实现这一点,并不需要你这样做。还是全部在一个文件里面。那么你如何分离error的log呢?非常简单:

引用
cat file.log |grep ERROR > error.log


只需要一行shell命令就搞定了。
0 请登录后投票
   发表时间:2007-04-29  
引用

我觉得要实现这一点,并不需要你这样做。还是全部在一个文件里面。那么你如何分离error的log呢?非常简单:

引用
cat file.log |grep ERROR > error.log


只需要一行shell命令就搞定了。


好像是没得办法,只能这样了。客户有意见也不管他。哈哈,让他自己找去
0 请登录后投票
   发表时间:2007-04-29  

使用log4j.xml xml格式的配置文件可以使用filter.


例如想只把log4j的debug信息输出到debug.log.error信息输出到error.log,info信息输出到info.log

log4j提供了下面一种方式来实现.

必须使用xml方式进行配置才能够支持filter过滤元素。

配置文件来自:

http://www.mail-archive.com/log4j-user@jakarta.apache.org/msg09720.html

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

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}
-- %p -- %m%n"/>
</layout>
</appender>

<appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:\\logs\\app-debug.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}
-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>

<appender name="INFO" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:\\logs\\app-info.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}
-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="INFO" />
</filter>
</appender>

<appender name="WARN" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:\\logs\\app-warn.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}
-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>

<appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:\\logs\\app-error.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c %d{ISO8601}
-- %p -- %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>

<root>
<priority value="debug"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
</root>

</log4j:configuration>

0 请登录后投票
   发表时间:2007-04-30  
要分开error和debug信息不容易,另外似乎也不完全合理,因为debug信息需要跟error信息有先后顺序,放在一起容易查错.

我分析了一下这个要求合理的部分,应该是,将error信息单独列出来,以方便了解是否有错误.
所以我觉得应该设置两个文件,一个专门放error信息,一个放debug信息(包含error),这样就可以了,性能方面也不会有大问题,因为error信息重复了一次,但对于debug信息来说,应该是很少的.
这样处理详细大家都会设置吧.
0 请登录后投票
   发表时间:2007-04-30  
配置文件为:
log4j.rootLogger=INFO, A_default
log4j.appender.A_default=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A_default.File=log/main.log
log4j.appender.A_default.layout=org.apache.log4j.PatternLayout
log4j.appender.A_default.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - %p  - (%F:%L) - %m%n

log4j.logger.businesslogic=DEBUG, BUSINESSLOGIC
log4j.additivity.businesslogic=false
log4j.appender.BUSINESSLOGIC=org.apache.log4j.RollingFileAppender
log4j.appender.BUSINESSLOGIC.File=log/businesslogic.log
log4j.appender.BUSINESSLOGIC.MaxFileSize=1000KB
log4j.appender.BUSINESSLOGIC.MaxBackupIndex=10
log4j.appender.BUSINESSLOGIC.Append=true
log4j.appender.BUSINESSLOGIC.layout=org.apache.log4j.PatternLayout
log4j.appender.BUSINESSLOGIC.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} - %p - (%F:%L) - %m%n

logger class:
public class LoggerInfo {

public  static Logger log = Logger.getRootLogger();
public  static Logger logerror=Logger.getLogger("businesslogic");

}

程序中:
LoggerInfo.logerror.error(e.getMessage());
LoggerInfo.log.info(e.getMessage());
不知道能不能帮你
0 请登录后投票
   发表时间:2007-04-30  
我们的项目就是分文件打印的..我到还没有注意怎么实现的.

log4j.properties 配置如下

log4j.appender.MF=org.apache.log4j.MultiFileAppender
log4j.appender.MF.maxBackupIndex=100000
log4j.appender.MF.maxFileSize=1MB
log4j.appender.MF.layout=org.apache.log4j.PatternLayout
log4j.appender.MF.layout.ConversionPattern=[%-5p] %d: %m%n
log4j.appender.MF.dir=${catalina.home}/logs/myLog

log4j.rootLogger=warn, MF

log4j.logger.myLog=debug


0 请登录后投票
   发表时间:2007-04-30  
log4j.threshold=ALL
log4j.rootLogger=ALL, stdout, DebugAppender, InfoAppender, WarnAppender, ErrorAppender

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.DebugAppender.access=DEBUG
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.File=C:\\logs\\app-debug.log
log4j.appender.DebugAppender.MaxFileSize=500KB
log4j.appender.DebugAppender.MaxBackupIndex=10
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.InfoAppender.access=INFO
log4j.appender.InfoAppender=org.apache.log4j.RollingFileAppender
log4j.appender.InfoAppender.File=C:\\logs\\app-info.log
log4j.appender.InfoAppender.MaxFileSize=500KB
log4j.appender.InfoAppender.MaxBackupIndex=10
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.WarnAppender.access=WARN
log4j.appender.WarnAppender=org.apache.log4j.RollingFileAppender
log4j.appender.WarnAppender.File=C:\\logs\\app-warn.log
log4j.appender.WarnAppender.MaxFileSize=500KB
log4j.appender.WarnAppender.MaxBackupIndex=10
log4j.appender.WarnAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.WarnAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n

log4j.logger.ErrorAppender.access=ERROR
log4j.appender.ErrorAppender=org.apache.log4j.RollingFileAppender
log4j.appender.ErrorAppender.File=C:\\logs\\app-error.log
log4j.appender.ErrorAppender.MaxFileSize=500KB
log4j.appender.ErrorAppender.MaxBackupIndex=10
log4j.appender.ErrorAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ErrorAppender.layout.ConversionPattern=%c %d{ISO8601} -- %p -- %m%n
0 请登录后投票
   发表时间:2007-04-30  
刚才忘了加mulitFileAppender的代码了

public class MultiFileAppender extends AppenderSkeleton {
	private final Map<String, RollingFileAppender> appenders = new HashMap<String, RollingFileAppender>();
	private final ReadWriteLock R_W_LOCK = new ReentrantReadWriteLock();
	private final Layout layout = new PatternLayout("%d: %m%n");
	private String dir = "/logs";
	private int maxBackupIndex = 0;
	private String maxFileSize = "1MB";

	public void setDir(String dir) {
		this.dir = dir;
	}

	public void append(LoggingEvent event) {
		Level l = event.getLevel();
		String key = l.toString();
		RollingFileAppender appender;
		R_W_LOCK.readLock().lock();
		try {
			appender = appenders.get(key);
		} finally {
			R_W_LOCK.readLock().unlock();
		}
		if (appender == null) {
			R_W_LOCK.writeLock().lock();
			try {
				appender = appenders.get(key);
				if (appender == null) {
					try {
						appender = new RollingFileAppender(layout, new File(dir, key.toLowerCase() + ".log").getPath());
						appender.setMaxFileSize(this.maxFileSize);
						appender.setMaxBackupIndex(this.maxBackupIndex);
						appenders.put(key, appender);
					} catch (IOException e) {
						throw new RuntimeException(e);
					}
				}
			} finally {
				R_W_LOCK.writeLock().unlock();
			}
		}
		appender.append(event);
	}

	public void setMaxBackupIndex(int maxBackups) {
		this.maxBackupIndex = maxBackups;
	}

	public void setMaxFileSize(String maxFileSize) {
		this.maxFileSize = maxFileSize;
	}

	public void close() {
		R_W_LOCK.readLock().lock();
		try {
			for (Iterator<RollingFileAppender> it = appenders.values().iterator(); it.hasNext();)
				it.next().close();
		} finally {
			R_W_LOCK.readLock().unlock();
		}
	}

	public boolean requiresLayout() {
		return false;
	}
}


问了下. 该实现方法的缺点是型式统一, 文件大小统一. 好处是配置文件少而简单, 支持自定义
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics