log4j每日生成日志的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j每日生成日志的问题相关的知识,希望对你有一定的参考价值。

我的log4j配置文件是这么写的:
log4j.rootLogger=DEBUG,stdout,file

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=%ddd MMM yyyy HH\:mm\:ss.SSS [%p] [%t] [%c] - %m%n

# log to file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=../logs/predeposit_logs
log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%ddd MMM yyyy HH\:mm\:ss.SSS [%p] [%t] [%c] - %m%n
我的log4j类是这么写的:
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

public class Log4j
static Logger logger = null;
public static void logRecord(String s)
logger = Logger.getLogger(Log4j. class .getName());
logger.setResourceBundle(ResourceBundle.getBundle( "properties/log4j" ));
Log4j.logger.debug( s );


以前一直用的好好的,每天都按日期生成一个文件,后来就不能每日都生成文件了,所有的都生成到一个日志里,每天把前一天的覆盖,然后还报这个错误:
Illegal access:this web application instance has bean stopped already.Could not load org.spi.NOPLoggerRepository.The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
虽然报错误,但是日志还可以记录,只是不能每天生成一个文件了。
请问这个是什么原因,应该怎么解决
我的文件名第一天的应该是predeposit_logs,以后的都应该是predeposit_logs_2010_04_15这种类型的,但是现在每一天的日志都叫predeposit_logs,然后还会把前一天的覆盖。
权限是全都允许的。

参考技术A 生成的log文件名变成什么了?
看看是不是服务器上文件读写权限的问题,有可能系统权限改过了。
参考技术B log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log'
===>
log4j.appender.file.File.DatePattern='_'yyyy-MM-dd'.log'
试试本回答被提问者采纳

Apache 每日日志

【中文标题】Apache 每日日志【英文标题】:Apache logs by day 【发布时间】:2011-11-15 23:07:00 【问题描述】:

我正在使用 Apache 和 JBoss。后者保存日志的方式非常好,因为它将(在 log4j 中选择时)同一天的日志保存在同一文件中。这使得日志、备份和统计数据更易于管理。

这可能在 Apache 中实现吗?每天一个日志文件,当天的所有信息仅在该文件中?

【问题讨论】:

【参考方案1】:

是的,有很多方法可以做到这一点 - 主要取决于运行的操作系统 - 你没有说。

您可以运行像logrotate 这样的外部程序,它可以移动文件并告诉 apache 刷新/关闭/重新打开其文件句柄。

另外,Apache httpd 附带一个名为 rotatelogs 的实用程序,通常配置为日志输出过滤器。

【讨论】:

谢谢,我已经在使用 logrotate 和 dateext,生成前 24 小时的文件,每个文件中包含两个不同日期的信息,这是我想要避免的。你的意思是我在 logrotate 中请求的功能有一种方法? 点击 Apache 的rotatelogs 文档,您会看到它能够为文件名添加日期戳,并指定时区偏移量或本地时间。将两者结合起来,您应该会很开心。【参考方案2】:

也许你可以试试这个

awk 'print $4' example.log | cut -d: -f1 | uniq -c

【讨论】:

以上是关于log4j每日生成日志的问题的主要内容,如果未能解决你的问题,请参考以下文章

log4j配置问题,每天生成一个日志文件

Apache 每日日志

分析 Log4j 生成的日志文件

如何将Hibernate生成的SQL语句打印到日志文件

log4j日志文件指定大小问题

log4j生成日志