我对Log4J(以及一般的Java)都不熟悉.我正在尝试将一些日志输出到logstash.我遇到了logstash的内置log4j输入类型的一些问题.出于这个原因,我想使用json_event布局方法.虽然我相信我已经正确设置了所有内容,但是当我启动我的应用程序时出现错误:
ERROR: RollingRandomAccessFile contains an invalid element or attribute "layout".
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我得到这个,或者如何解决这个问题.我对使用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>
Run Code Online (Sandbox Code Playgroud)
要启动我的应用程序,我在命令行运行以下命令:
java -Dlog4j.configurationFile=log4j2.xml -cp "/home/ubuntu/jsonevent-layout-1.6.jar" -Xms256m -Xmx1024m -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)
我已经确认jsonevent-layout-1.6.jar的路径是正确的.如果删除新布局,我的应用程序会成功登录.所以,我知道log4j运行正常.我知道我的应用运行得很好.使用json_event布局隔离此问题.有人可以帮我解决这个问题吗?我完全不知道自己做错了什么.
谢谢
小智 0
您的配置不正确。
这条线;
<layout class="net.logstash.log4j.JSONEventLayoutV1" />
Run Code Online (Sandbox Code Playgroud)
想要看起来像这样;
<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>
Run Code Online (Sandbox Code Playgroud)