Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 登录到JSON_Java_Logging_Slf4j - Fatal编程技术网

Java 登录到JSON

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格式。你 可以在日志系统中安装它,

我想知道是否有一个slf4j的实现可以登录到JSON格式。其中,每条日志消息都是一个JSON对象,每行1条

e、 g.日志文件的每一行看起来都像这样:

{"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作为后端:

如果您使用JUL(java.util.logging)作为后端:

请注意,它们都将单个日志事件格式化为JSON对象。没有创建有效的JSON数组。

如果您使用作为后端,请签出。它包含以json格式登录的编码器

您可以将其作为Maven依赖项包含:

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