Java Log4j RollingFileAppender未按预期工作
我正在开发一个应用程序,在这个应用程序中,我必须根据大小维护日志,我已经按照下面的代码片段这样做了,我所期望的是,每10MB之后,就会创建一个新的日志滚动程序,比如Mylog.1.log、Mylog.2.log等等,不幸的是,它没有发生 虽然它创建了Mylog.1.log,但在删除Mylog.1.log和创建Mylog.2.log之后,这 这不是预期的行为Java Log4j RollingFileAppender未按预期工作,java,log4j,websphere,Java,Log4j,Websphere,我正在开发一个应用程序,在这个应用程序中,我必须根据大小维护日志,我已经按照下面的代码片段这样做了,我所期望的是,每10MB之后,就会创建一个新的日志滚动程序,比如Mylog.1.log、Mylog.2.log等等,不幸的是,它没有发生 虽然它创建了Mylog.1.log,但在删除Mylog.1.log和创建Mylog.2.log之后,这 这不是预期的行为 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:confi
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true"
xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="true"/>
<param name="file" value="E:/logs/Mylog.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="fileAppender"/>
</root>
环境
操作系统:Windows7
应用服务器:IBMWebSphere8
编程语言:java
谷歌搜索了很多,结果似乎并没有多大收获,任何帮助都是非常感谢的。谢谢。下面的log4j配置在生产中运行良好。使用的log4j版本是1.2.15
<appender name="FILE_JVM" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/logs/app.log"/>
<param name="maxFileSize" value="20MB"/>
<param name="maxBackupIndex" value="50"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</layout>
</appender>
类路径中唯一的jar是log4j-1.2.17.jar。它在您的终端工作吗?发生这种情况是因为在
RollingFileAppender.java
中的rollOver()
方法中,当前日志文件的重命名失败
renameSucceeded = file.renameTo(target);
此处file.renameTo(目标)
返回false。要解决此问题,请重写该方法并添加自定义代码以修复此问题。一种方法是在上述语句之后添加以下代码
if(!renameSucceeded) //custom code begins
{
try
{
FileUtils.copyFile(file, target);
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
bw.write("");
bw.flush();
bw.close();
renameSucceeded = true;
}
catch (IOException e) {
renameSucceeded = false;
}
}
你为什么不使用log4j2呢?谢谢你的回复肖恩,我不能改变环境,一些如何处理log4j本身的问题没有运气安迪!我是否也需要在log4j.dtd中调整其他内容?不,dtd看起来很好。你有什么版本的log4j?同意Andy!我的代码与你的代码类似。在某个地方它被搞砸了:(你复制了上面的代码并在你的终端作为一个独立的应用程序运行了吗?我复制了,并且在独立的应用程序中:),我怀疑我的websphere正在扼杀这种行为。。非常感谢您帮助我缩小问题范围。现在我再问一个关于websphere行为的问题。
renameSucceeded = file.renameTo(target);
if(!renameSucceeded) //custom code begins
{
try
{
FileUtils.copyFile(file, target);
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
bw.write("");
bw.flush();
bw.close();
renameSucceeded = true;
}
catch (IOException e) {
renameSucceeded = false;
}
}