Log4j RollingFileAppender无法按预期工作 [英] Log4j RollingFileAppender not working as expected

查看:101
本文介绍了Log4j RollingFileAppender无法按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个必须根据大小维护日志的应用程序,并且已经按照下面的代码片段进行了操作,我期望的是每10MB之后,一个新的日志记录器说Mylog.1.log,将会创建Mylog.2.log等,不幸的是它没有发生.

I'm just working on an application where I gotta maintain logs based on size, and I have done so as below code snippet, what I was expecting was after every 10MB, a new log roller say Mylog.1.log, Mylog.2.log and so on will be created, unfortunately its not happening.

尽管它创建了Mylog.1.log,但发布了删除Mylog.1.log并创建Mylog.2.log的信息, 不是预期的行为.

Though it creates Mylog.1.log, post that its removing Mylog.1.log and creating Mylog.2.log, this is not expected behaviour.

<?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>

环境 作业系统:Windows 7 应用程序服务器:IBM Websphere 8 编程语言:java

Environment OS : Windows 7 Application Server : IBM Websphere 8 Programming language : java

用Google进行了大量搜索,结果似乎并不富有成效,我们将为您提供任何帮助.谢谢.

Googled a lot, result doesnt seems fruitful, any help is appreciated. Thanks.

推荐答案

我们的以下log4j配置在生产中运行良好.使用的log4j版本是1.2.15

We have the below log4j configuration running well in production. The log4j version used is 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>

与您比较的只是参数maxFileSize&的情况. maxBackupIndex不同.

Comparing it with your I just the case of params maxFileSize & maxBackupIndex different.

我使用log4j 1.2.17尝试了一个示例,并能够看到日志被app.log.1,app.log.2,app.log.3等文件滚了过来.尝试在最后运行它,看看可能会丢失什么.

I tried a sample with log4j 1.2.17 and was able to see the logs getting rolled over with app.log.1, app.log.2, app.log.3 and so on files in my logs directory. Try running it at your end and see what could be missing.

<?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");
    }

}

我在班级路径中唯一的jar是log4j-1.2.17.jar.它对您有用吗?

The only jar I have in my class path is log4j-1.2.17.jar. Does it work at your end?

这篇关于Log4j RollingFileAppender无法按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆