Java 登录到JSON
我想知道是否有一个slf4j的实现可以登录到JSON格式。其中,每条日志消息都是一个JSON对象,每行1条 e、 g.日志文件的每一行看起来都像这样:Java 登录到JSON,java,logging,slf4j,Java,Logging,Slf4j,我想知道是否有一个slf4j的实现可以登录到JSON格式。其中,每条日志消息都是一个JSON对象,每行1条 e、 g.日志文件的每一行看起来都像这样: {"severity":"WARN", "ts":12345678, "host":"myhostname.com", "message":"Failed to do something"} 我想这就是你想要的: 我以前没有用过这个,但在我提到的页面上说: 它包含一个格式化程序,用于将日志条目格式化为JSON格式。你 可以在日志系统中安装它,
{"severity":"WARN", "ts":12345678, "host":"myhostname.com", "message":"Failed to do something"}
我想这就是你想要的: 我以前没有用过这个,但在我提到的页面上说: 它包含一个格式化程序,用于将日志条目格式化为JSON格式。你 可以在日志系统中安装它,然后解析日志 使用核心工具进行流式处理 一段时间前,一个为(另见)。顾名思义,它使用MongoDB存储日志事件,但由于MongoDB方便了类似JSON的文档存储,您可能会发现它很有用:
{
"_id" : ObjectId("4d9cbcbf7abb3abdaf9679cd"),
"timeStamp" : ISODate("2011-04-06T19:19:27.006Z"),
"level" : "ERROR",
"thread" : "main",
"logger" : "ch.qos.logback.classic.db.mongo.MongoDBAppenderTest",
"message" : "D"
}
如果您使用Log4j作为后端:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.4</version>
</dependency>
net.logstash.logback
):
信息
/一些/path/to/your/file.log
/some/path/to/your/file.log.%d{yyyy-MM-dd}
30
我使用的是Log4j2,我有一个类似的需求。这对我有帮助-
log4j2.xml:
<Console name="Console" target="SYSTEM_OUT">
<JSONEventLayoutV1>
</Console>
我必须将以下执行添加到我的maven编译器插件构建插件中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>log4j-plugin-processor</id>
<goals>
<goal>compile</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<proc>only</proc>
<annotationProcessors>
<annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor</annotationProcessor>
</annotationProcessors>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven编译器插件
3.1
log4j插件处理器
编译
进程类
只有
org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor
好的,这个线程需要更新一点,因为大多数答案都很旧。所有现代java日志库都支持json开箱即用的布局。使用log4j2,您甚至不需要任何额外的lib,只需要类路径中的jackson,您很可能已经有了它
当然,您确实需要使用json布局并显式指定它。
请参见log4j2的示例。
请注意,对于所选的日志收集器,默认布局可能无法按预期工作。例如,我使用FileBeat,它要求每行生成一个日志。Log4j2有一个参数元组:
与eventEol=true和compact=true一起使用,每行获得一条记录
我的附件如下所示:
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
<JsonLayout complete="false" compact="true" eventEol="true"/>
</Console>
<Console name="STDERR" target="SYSTEM_ERR">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<JsonLayout complete="false" compact="true" eventEol="true"/>
</Console>
</Appenders>
该URL不再是可解析的,但在github上仍然可以看到一些东西。什么意思是“开箱即用”?你是怎么做到的?这不是答案。根据@BuhBuh的请求添加了更多详细信息
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
<JsonLayout complete="false" compact="true" eventEol="true"/>
</Console>
<Console name="STDERR" target="SYSTEM_ERR">
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
<JsonLayout complete="false" compact="true" eventEol="true"/>
</Console>
</Appenders>