Log4j将json数组写入磁盘

时间:2014-03-10 01:10:19

标签: java logging log4j filewriter

我正在创建一个日志文件系统。日志文件将采用json格式,因此服务器可以读取它,但我不认为这太重要了。我需要知道的是,log4j可以配置为写入文件,但文件中没有任何标签,如info,debug,timestamp等。我看过这里

但是这会将文件与其他内容一起使用。我只希望我写的数据显示在文件中。如果在达到最大尺寸后它变得太大,我还想在文件上设置某种文件旋转。

3 个答案:

答案 0 :(得分:1)

你想要的是只有%m%n的PatternLayout,并结合前面提到的问题here的答案

答案 1 :(得分:1)

这相对容易,使用log4j.properties配置文件(将其放在类路径的顶部,Log4j将“找到它”):

# This is the default logger, simply logs to console
log4j.logger.com.foo.bar=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Note the Pattern here, emits a lot of stuff - btw, don't use this in production
# %C is expensive - see the Javadoc for ConversionPattern for the meaning of all
# the % modifiers:
log4j.appender.A1.layout.ConversionPattern=%d{MMM dd, HH:mm:ss} [%C{2}] %-5p - %m%n

# Logging to file can be enabled by using this one
log4j.logger.com.example=DEBUG, R

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=/var/log/generic.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

# This is the most minimalist layout you can have: just the 'm'essage is emitted
# (and a \n newline):
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%m%n

com.foo.bar包(和子包)中的所有类都将登录到控制台,com.example(及以下)中的类将登录到/var/log/generic.log

要发出JSON,只需使用Jacksoncom.fasterxml)将数据转换为JSON对象并将其作为字符串写出来。

答案 2 :(得分:0)

你应该能够编写一个自定义日志appender,我有一个模糊的回忆,有一个例子用MongoDB做这个。 MongoDD将其数据存储为JSON,因此在插入之前它已将日志转换为json格式。

我首先会搜索一个MondgoDB appender,并查看附带的文件appender,如果一个appender已经存在,它应该为你提供一个起点。

http://log4mongo.org/display/PUB/Home