Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在log4j中配置RollingFileAppender_Java_Logging_Log4j - Fatal编程技术网

Java 在log4j中配置RollingFileAppender

Java 在log4j中配置RollingFileAppender,java,logging,log4j,Java,Logging,Log4j,我正在处理一组web服务,我们希望有一个每日轮换日志 我正试图从log4j extras companion中获取org.apache.log4j.rolling.RollingFileAppender,因为文档表明这最适合于生产环境 我在类路径上有主log4J库(log4J-1.2.15.jar)和log4J附加库(apache-log4J-extras-1.1.jar) 我在log4j.properties文件中对appender进行了以下配置: ### SOAP Request Appen

我正在处理一组web服务,我们希望有一个每日轮换日志

我正试图从log4j extras companion中获取
org.apache.log4j.rolling.RollingFileAppender
,因为文档表明这最适合于生产环境

我在类路径上有主log4J库(
log4J-1.2.15.jar
)和log4J附加库(
apache-log4J-extras-1.1.jar

我在
log4j.properties
文件中对appender进行了以下配置:

### SOAP Request Appender
log4j.appender.request=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.request.File=SOAPmessages.log
log4j.appender.request.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.request.RollingPolicy.ActiveFileName =SOAPmessages-%d.log
log4j.appender.request.RollingPolicy.FileNamePattern=SOAPmessages-%d.log.zip
log4j.appender.request.layout = org.apache.log4j.PatternLayout
log4j.appender.request.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
但是,当我在调试模式下使用log4j启动web服务时,会收到以下错误消息:

log4j: Parsing appender named "request".
log4j: Parsing layout options for "request".
log4j: Setting property [conversionPattern] to [%d{ABSOLUTE} %5p %c{1}:%L - %m%n].
log4j: End of parsing for "request".
log4j: Setting property [file] to [/logs/SOAPmessages.log].
log4j:WARN Failed to set property [rollingPolicy] to value "org.apache.log4j.rolling.TimeBasedRollingPolicy". 
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'request'
log4j: Parsed "request" options.
我发现关于如何配置这个appender的文档有点少,所以有人能帮我修复配置吗?


EDIT0:添加了调试模式输出,而不仅仅是标准警告

我怀疑
ActiveFileName
属性。根据log4jjavadoc,在
TimeBasedRollingPolicy
类上没有这样的属性。(无
setActiveFileName
getActiveFileName
方法。)

我不知道指定未知属性会做什么,但它可能会导致包含对象被放弃,这可能会导致您看到的警告


试着省去它,看看会发生什么。

更新:至少早在2013年(见穆巴沙尔的评论)这就开始起作用了


根据,您不能使用log4j.properties对其进行配置,而只能使用XML配置格式:

请注意,TimeBasedRollingPolicy只能用xml配置,不能用log4j.properties配置

不幸的是,它们提供的示例log4j.xml也不起作用:

log4j:ERROR Parsing error on line 14 and column 76
log4j:ERROR Element type "rollingPolicy" must be declared.
...
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE'

Toolbear74正确,需要log4j.XML。 为了让XML验证
标记,需要在
我建议设置日志记录阈值

创建Log4j.xml文件时,不要忘记将Log4j.dtd复制到同一位置

以下是一个例子:

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<!-- Daily Rolling File Appender that compresses old files -->
  <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender" >
     <param name="threshold" value="info"/>
     <rollingPolicy name="file"  
                      class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" 
               value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/>
        <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/>
     </rollingPolicy>
     <layout class="org.apache.log4j.EnhancedPatternLayout" >
        <param name="ConversionPattern" 
               value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" />
    </layout>
  </appender>

  <root>
    <priority value="debug"></priority>
    <appender-ref ref="file" />
  </root>
</log4j:configuration>
log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender
log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log

考虑到您设置的
FileNamePattern
ActiveFileName
属性,我认为设置
File
属性是多余的,甚至可能是错误的


尝试重命名log4j.properties并放入类似于我的示例的log4j.xml,看看会发生什么情况。

我遇到了类似的问题,刚刚找到了一种解决方法(通过单步执行
log4j extras
源代码,不少于…)

好消息是,与其他地方编写的内容不同,实际上可以使用log4j.properties配置TimeBasedRollingPolicy(不需要XML配置!至少在log4j>1.2.16的版本中可以看到这一点)

以下是一个例子:

<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<!-- Daily Rolling File Appender that compresses old files -->
  <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender" >
     <param name="threshold" value="info"/>
     <rollingPolicy name="file"  
                      class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
        <param name="FileNamePattern" 
               value="${catalina.base}/logs/myapp.log.%d{yyyy-MM-dd}.gz"/>
        <param name="ActiveFileName" value="${catalina.base}/logs/myapp.log"/>
     </rollingPolicy>
     <layout class="org.apache.log4j.EnhancedPatternLayout" >
        <param name="ConversionPattern" 
               value="%d{ISO8601} %-5p - %-26.26c{1} - %m%n" />
    </layout>
  </appender>

  <root>
    <priority value="debug"></priority>
    <appender-ref ref="file" />
  </root>
</log4j:configuration>
log4j.appender.File = org.apache.log4j.rolling.RollingFileAppender
log4j.appender.File.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.File.rollingPolicy.FileNamePattern = logs/worker-${instanceId}.%d{yyyyMMdd-HHmm}.log
顺便说一句,
${instanceId}
位是我在Amazon的EC2上用来区分日志和我的所有工作程序的东西——我只需要在调用
propertyconfigulator.configure()之前设置该属性,如下所示:

p.setProperty("instanceId", EC2Util.getMyInstanceId());
PropertyConfigurator.configure(p);

你的包名不好

org.apache.log4j.rolling.RollingFileAppender 
正确的答案是:

org.apache.log4j.RollingFileAppender 

在实现这一目标的过程中面临更多问题。详情如下:

  • 下载并在类路径中添加
    apache-log4j-extras-1.1.jar
    ,一开始没有注意到这一点
  • RollingFileAppender
    应该是
    org.apache.log4j.rolling.RollingFileAppender
    ,而不是
    org.apache.log4j.RollingFileAppender
    。这可能会产生错误:
    log4j:error没有为名为[file]的appender设置输出流或文件。
  • 我们必须将log4j库从
    log4j-1.2.14.jar
    升级到
    log4j-1.2.16.jar
  • 以下是对我有效的appender配置:

    <appender name="file" class="org.apache.log4j.rolling.RollingFileAppender">
            <param name="threshold" value="debug" />
            <rollingPolicy name="file"
                class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
                <param name="FileNamePattern" value="logs/MyLog-%d{yyyy-MM-dd-HH-mm}.log.gz" />
                <!-- The below param will keep the live update file in a different location-->
                <!-- param name="ActiveFileName" value="current/MyLog.log" /-->
            </rollingPolicy>
    
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
            </layout>
    </appender>
    

    关于错误:
    log4j:必须声明错误元素类型“rollingPolicy”

  • 使用比log4j-1.2.14.jar更新的log4j.jar版本,该版本具有
    log4j.dtd
    defining
    rollingPolicy
  • 当然,您还需要
    apache-log4j-extras-1.1.jar
  • 检查您正在使用的任何其他第三方jar中是否有较旧版本的log4j.jar。 如果是这样,请确保您的log4j.jar排在包含旧log4j.jar的第三方之前
  • 在Log4j2中,“extras”库不再是必需的。配置格式也已更改

    下面提供了一个示例


    ActiveFileName
    属性记录在这里:我将尝试取出它,看看发生了什么注释掉
    ActiveFileName
    属性不会改变观察到的行为要解决此问题,我认为您可以尝试打开Log4j调试模式,看看是否有任何更详细的错误消息没有答案,只是一个建议。你真的应该调查一下logback。log4j.FYI:这个问题在log4jv1.2.16中得到了修复。它现在支持通过属性文件设置rollingPolicy。我明白了,我没有注意到在我阅读的任何文档中,也没有任何指向wiki的链接会有所帮助。感谢您指出+1在您回答问题时,这可能是正确的,但是log4j.properties文件可以正常工作,至少对于Mether来说,apache提供了一个“log4j extras”包,您可以在其中找到定义的“rollingPolicy”。它将解决你的许多问题problems@toolbear:我不同意,因为我使用的是log4j.properties,它工作正常。是不是他们后来添加了支持。@SagarKharab的答案已经过时了。2011年,它没有起作用。早在2013年(见穆巴沙尔的评论),它就奏效了。我已经更新了我的答案来说明这一点。是的,它需要使用XML+1I进行配置,我宁愿添加一个libr