精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-29
由于debug日志非常多,使得error日志比较难找,怎样配置才可以将com.demo.key.ftp输出的日志按级别输出到不同的文件中去呢? log4j.logger.com.demo.key.ftp=DEBUG, file 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-29
没见过这种功能
关注一下 |
|
返回顶楼 | |
发表时间: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命令就搞定了。 |
|
返回顶楼 | |
发表时间:2007-04-29
引用 我觉得要实现这一点,并不需要你这样做。还是全部在一个文件里面。那么你如何分离error的log呢?非常简单: 引用 cat file.log |grep ERROR > error.log
只需要一行shell命令就搞定了。 ![]() |
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2007-04-30
要分开error和debug信息不容易,另外似乎也不完全合理,因为debug信息需要跟error信息有先后顺序,放在一起容易查错.
我分析了一下这个要求合理的部分,应该是,将error信息单独列出来,以方便了解是否有错误. 所以我觉得应该设置两个文件,一个专门放error信息,一个放debug信息(包含error),这样就可以了,性能方面也不会有大问题,因为error信息重复了一次,但对于debug信息来说,应该是很少的. 这样处理详细大家都会设置吧. |
|
返回顶楼 | |
发表时间: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()); 不知道能不能帮你 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间: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; } } 问了下. 该实现方法的缺点是型式统一, 文件大小统一. 好处是配置文件少而简单, 支持自定义 |
|
返回顶楼 | |