我正在使用 log4j 在我的 java 应用程序中显示日志。我使用 DailyRolligFileAppender 滚动日志文件。在我手动重启之前它运行良好。重新启动应用程序时,我将丢失最后一个日志文件。log4j 将获取这个文件,覆盖它,放入两行日志,然后创建一个新文件并写入。所以我丢失了最后一个文件。
例如:我有
App.log.2015-10-09
App.log.2015-10-10(上次重启)
App.log.2015-10-11
App.log.2015-10-12
假设上次重启是在 2015 年 10 月 10 日。如果我在 2015-10-12 重新启动应用程序,那么 log4j 将覆盖 App.log.2015-10-10 文件的内容,写入以下行:
应用程序 - 2015 年 10 月 12 日 10:18:31,960 调试 -- [PropertyMessageResources]
应用程序 - 2015 年 10 月 12 日 10:18:31,972 调试 --[ActionServlet] 完成此控制器 servlet
应用程序 - 2015 年 10 月 12 日 10:18:31,977 信息 -- [GraniteConfigListener ] GraniteDS 停止
然后它将关闭此文件并创建一个通常命名的新文件,该文件App.log
将写入当前日志。
这是我的 log4j.xml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
<!-- ********** APPENDERS DEFINITION (begin) ********** -->
<appender name="exp_FILE_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data1/nom_app/logs/app.log" />
<param name="Append" value="true" />
<param name="DatePattern" value=".yyyy-MM-dd-HH-mm" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="nom_app - %d{DATE} %-5p %X{Batch}-%X{idSession}-%X{idRequete} [%c{1}] %m%n" />
</layout>
</appender>
<!-- Delia -->
<logger name="nom_package">
<level value="DEBUG" />
</logger>
<!-- appender -->
<root>
<level value="DEBUG" />
<appender-ref ref="exp_FILE_APPENDER" />
</root>
</log4j:configuration>
你能告诉我我应该怎么做才能避免日志文件的丢失。