我只是工作的一个应用程序,我得保持基于大小的日志,我也如下面的代码片段这样做,我所期待的是每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: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>
环境 OS:Windows 7应用程序服务器:IBM的Websphere 8编程语言:JAVA
用Google搜索了很多,造成犯规显得卓有成效,任何帮助表示赞赏。 谢谢。
我们有以下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>
它与你我只是PARAMS maxFileSize为&maxBackupIndex不同的情况相比较。
我试着用的log4j 1.2.17样品,并能看到日志越来越辗过与app.log.1,app.log.2,app.log.3等都在我的日志目录中的文件。 试着在你结束运行一下,看看有什么可以丢失。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</layout>
</appender>
<appender name="FILE_JVM" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="E:/Sundry/Projects/Log4jEmailSample/logs/app.log"/>
<param name="maxFileSize" value="1MB"/>
<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>
<!-- the ROOT Logger -->
<root>
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE_JVM"/>
</root>
</log4j:configuration>
下面的独立的应用程序
import org.apache.log4j.Logger;
import java.util.concurrent.TimeUnit;
public class MainApp {
public static void main(String[] args) {
Logger logger = Logger.getLogger(MainApp.class);
while (true) {
logMessages(logger);
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
private static void logMessages(Logger logger) {
logger.info("Info message");
}
}
我在我的类路径中的唯一的罐子log4j的-1.2.17.jar。 它是否在你结束工作?
这是因为在rollOver()
的方法RollingFileAppender.java
,当前日志文件重命名失败。
renameSucceeded = file.renameTo(target);
这里file.renameTo(target)
返回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;
}
}