我从一个文本文件中读取一个头文件,并使用log4j将其添加到文件中。头被成功插入,但它插入头每次重新启动我的应用程序,但我希望头被插入只有当文件被创建。我使用的是dailyrollingfileappender,它会在每个午夜滚动创建一个新文件。
我正在重写patternlayout类中的getheader方法,以便将头添加到文件中。
有人能帮我只插入一次标题吗(即只有在创建文件时)?
log4j.appender.ErrFileAppender=com.logger.ErrorFile
log4j.appender.ErrFileAppender.Threshold=WARN
log4j.appender.ErrFileAppender.File=${logdir}/Error.log
log4j.appender.ErrFileAppender.layout=com.logger.header.ErrHeader
log4j.appender.ErrFileAppender.DatePattern='.' yyyy-MM-dd
log4j.appender.ErrFileAppender.layout.ConversionPattern= %m%n
3条答案
按热度按时间vddsk6oq1#
victor的解决方案很好,但是有一个缺陷,例如,如果配置了rollingfileappender,那么显然您希望在每个滚动文件中写入头。然而@override setfile只会在旧文件中插入一个头文件,即使旧文件被翻滚并创建了新文件。
我从这次讨论中找到了解决办法(https://groups.google.com/forum/#!topic/comp.lang.java.programmer/mkl0mt5gepo),其建议是重写writeheader()方法。这个writeheader有修饰符保护,所以我们需要在org.apache.log4j包中创建errorfile
在log4j.properties中,从
到
hvvq6cgz2#
我也有同样的问题,你能不能在重写setfile方法时发布代码或逻辑示例,以避免每次重新启动应用程序时插入header。
谢谢。
更新我计算了我们的方法,以下是我的实现:
其中registerpatternlayout=my custom layout class i constructed overriding
getHeader()
方法。不管怎样,我想看看你的执行情况,谢谢!
xghobddn3#
我想出了解决办法。我要做的是重写log4j.fileappender的setfile()方法,在这里我添加了只在文件为空时插入头的逻辑。
这很管用。但我不确定是否有更好的解决办法。