Вход в JSON - PullRequest
       4

Вход в JSON

8 голосов
/ 18 января 2012

Мне интересно, есть ли реализация slf4j, которая регистрируется в формате JSON. Где каждое сообщение журнала было бы объектом JSON, 1 на строку.

например. каждая строка файла журнала будет выглядеть примерно так:

{"severity":"WARN", "ts":12345678, "host":"myhostname.com", "message":"Failed to do something"}

Ответы [ 6 ]

3 голосов
/ 08 июня 2017

Хорошо, эту ветку нужно немного обновить, так как большинство ответов довольно старые.Все современные библиотеки java log поддерживают макет json из коробки.С log4j2 вам даже не нужны никакие дополнительные библиотеки, просто Джексон в вашем classpath, который, скорее всего, у вас уже есть.

Если этого недостаточно, вы также можете взглянуть на этот репо: https://github.com/savoirtech/slf4j-json-logger

3 голосов
/ 12 мая 2017

Я использовал Log4j2, и у меня было похожее требование. Это помогло мне -

https://github.com/maartenbosteels/log4j-jsonevent-layout

log4j2.xml:

<Console name="Console" target="SYSTEM_OUT">
    <JSONEventLayoutV1>
</Console>

Мне пришлось добавить следующее выполнение в мой плагин сборки maven-compiler-plugin:

<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>
2 голосов
/ 10 августа 2015

Если вы используете Logback в качестве бэкэнда, проверьте logstash-logback-encoder .Он содержит кодировщики для входа в формате json.

Вы можете включить его как зависимость Maven:

<dependency>
  <groupId>net.logstash.logback</groupId>
  <artifactId>logstash-logback-encoder</artifactId>
  <version>4.4</version>
</dependency>

И в свой файл конфигурации logback.xml включите кодировщик.Пример RollingFileAppender, используемый с LogstashEncoder, упомянутым ниже (Источник - logstash-logback-encoder # encoder ):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="stash" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>info</level>
    </filter>
    <file>/some/path/to/your/file.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>/some/path/to/your/file.log.%d{yyyy-MM-dd}</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
  </appender>
  <root level="all">
    <appender-ref ref="stash" />
  </root>
</configuration>
2 голосов
/ 27 июня 2013

Если вы используете Log4j в качестве бэкэнда:

Если вы используете JUL (java.util.logging) в качестве внутреннего интерфейса:

Обратите внимание, что все они форматируют одно событие журнала как объект JSON.Действительный массив JSON не создан.

2 голосов
/ 18 января 2012

Я думаю, это то, что вы ищете: http://jsontools.berlios.de/articles/faq/what-is-in-log4j.html

Я не использовал это раньше, но на упомянутой мной странице написано:

Содержит форматтеротформатировать записи журнала в формате JSON.Вы можете установить его в своей системе журналов, а затем проанализировать поток журналов с помощью основных инструментов.

1 голос
/ 24 января 2012

Некоторое время назад Я написал a MongoDBAppender для Logback (см. Также LBCLASSIC-261 ).Как следует из названия, он использует 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"
}
...