0

我正在使用 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>

你能告诉我我应该怎么做才能避免日志文件的丢失。

4

0 回答 0