Log4j - RollingRandomAccessFile中的元素或属性无效

时间:2014-04-09 22:59:10

标签: java log4j

我是Log4J(以及一般的Java)的新手。我试图将一些日志输出到logstash。我遇到了logstash的内置log4j输入类型的一些问题。出于这个原因,我想使用json_event layout方法。虽然我相信我已经正确设置了所有设置,但当我启动应用程序时,我发现了错误:

ERROR: RollingRandomAccessFile contains an invalid element or attribute "layout".

我不明白为什么我会得到这个,或者如何解决这个问题。我对以json_event格式获取日志的兴趣比其他任何东西都要高。目前,我的log4j2.xml文件如下所示:

<Configuration status="WARN" monitorInterval="30">
  <Appenders>
    <RollingRandomAccessFile name="RollingFile" fileName="/logs/recent.log"
      filePattern="/logs/$${date:yyyy-MM}/server-%d{yyyy-MM-dd-HH}-%i.log.gz">
      <layout class="net.logstash.log4j.JSONEventLayoutV1" />
      <Policies>
        <TimeBasedTriggeringPolicy interval="4" modulate="true"/>
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingRandomAccessFile>
    <Async name="AsyncFile">
      <AppenderRef ref="RollingFile"/>
    </Async>
  </Appenders>
  <Loggers>
    <Logger name="com.myApp" level="trace" additivity="false">
      <AppenderRef ref="AsyncFile"/>
    </Logger>
    <Root level="trace">
      <AppenderRef ref="AsyncFile"/>
    </Root>
  </Loggers>
</Configuration>

要启动我的应用,我在命令行运行以下命令:

java -Dlog4j.configurationFile=log4j2.xml -cp "/home/ubuntu/jsonevent-layout-1.6.jar" -Xms256m -Xmx1024m -jar myApp.jar

我已经确认jsonevent-layout-1.6.jar的路径是正确的。如果删除新布局,我的应用程序会成功登录。所以,我知道log4j运行正常。我知道我的应用运行得很好。使用json_event布局隔离此问题。有人可以帮我解决这个问题吗?我完全不知道自己做错了什么。

谢谢

2 个答案:

答案 0 :(得分:0)

您的配置不正确。

这一行;

<layout class="net.logstash.log4j.JSONEventLayoutV1" />

希望看起来像这样;

<RollingRandomAccessFile name="RollingFile" fileName="/logs/recent.log"
  filePattern="/logs/$${date:yyyy-MM}/server-%d{yyyy-MM-dd-HH}-%i.log.gz">
  <net.logstash.log4j.JSONEventLayoutV1>
     ..properties here
  </net.logstash.log4j.JSONEventLayoutV1>
  <Policies>
    <TimeBasedTriggeringPolicy interval="4" modulate="true"/>
    <SizeBasedTriggeringPolicy size="100 MB"/>
  </Policies>
</RollingRandomAccessFile>

答案 1 :(得分:0)

github.com/logstash/log4j-jsonevent-layout中的net.logstash.log4j.JSONEventLayoutV1不适用于Log4J2。您将在github.com/maartenbosteels/log4j-jsonevent-layout找到一个与Log4J2兼容的分支。不幸的是,它不是一个中心。所以你必须解决这个问题。但是,一旦你知道你的log4j2.xml看起来像。

<RollingRandomAccessFile name="RollingFile" fileName="/logs/recent.log"
   filePattern="/logs/$${date:yyyy-MM}/server-%d{yyyy-MM-dd-HH}-%i.log.gz">
   <JSONEventLayoutV1>
   <Policies>
     <TimeBasedTriggeringPolicy interval="4" modulate="true"/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
   </Policies>
</RollingRandomAccessFile>