2012-01-18 38 views
4

我想知道是否有一個實現slf4j登錄到JSON格式。每個日誌消息將是一個JSON對象,每行1個。記錄到JSON

例如日誌文件的每一行看起來象是這樣的:

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

回答

2

我想這是你在找什麼: http://jsontools.berlios.de/articles/faq/what-is-in-log4j.html

我沒有使用過這之前,但我提到的網頁上說:

它包含格式化程序,用於格式化JSON格式的日誌條目。您可以將其安裝到日誌系統中,然後使用核心工具解析日誌 流。

+0

該網址無法解析了,但事情仍然可見在github https://github.com/bfrancojr/Java- JSON-工具 – cheffe 2015-04-07 11:05:35

1

前段時間I wrote一個MongoDBAppenderLogback(見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" 
} 
2

如果您使用Logback作爲後端,請查看logstash-logback-encoder。它包含編碼器以登錄json格式。

你可以把它作爲一個Maven依賴性:

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

而在你logback.xml配置文件,包括編碼器。與LogstashEncoder使用RollingFileAppender進行例如下文提到的(源 - 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

我用Log4j2和我也有類似的要求。這幫助我 -

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

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

好吧,這個線程需要更新了一下,因爲大部分的答案是相當舊。所有現代化的java日誌庫都支持json佈局。有了log4j2,你甚至不需要任何額外的庫,只需要在你的類路徑中的傑克遜,你最有可能已經有了。

如果這還不夠,你也可以看看這個回購:https://github.com/savoirtech/slf4j-json-logger