Java Log4j将json数组写入磁盘

Java Log4j将json数组写入磁盘,java,logging,log4j,filewriter,Java,Logging,Log4j,Filewriter,我正在创建一个日志文件系统。日志文件将采用json格式,因此服务器可以在之后读取它,但我认为这并不太重要。我需要知道的是,可以将log4j配置为写入文件,但文件中没有任何标记,如info、debug、timestamp等。我在这里看过了 但这会把文件和其他东西混在一起。我只希望写入的数据显示在文件中。如果文件在达到最大大小后变得太大,我还想在文件上设置某种文件旋转 您应该能够编写一个定制的日志追加器,我隐约记得有一个例子可以用MongoDB实现这一点。 MongoDD将其数据存储为JSON,因此

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


但这会把文件和其他东西混在一起。我只希望写入的数据显示在文件中。如果文件在达到最大大小后变得太大,我还想在文件上设置某种文件旋转

您应该能够编写一个定制的日志追加器,我隐约记得有一个例子可以用MongoDB实现这一点。 MongoDD将其数据存储为JSON,因此在插入日志之前,它已将日志转换为JSON格式

首先,我会搜索MondgoDB appender,并查看附带的文件appender,如果appender不存在,那么应该为您提供一个appender的起点


您想要的是仅包含%m%n的,并与前面问题的答案相结合

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

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


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

谢谢。你能告诉我这行是什么意思吗?#保留一个备份文件log4j.appender.R.MaxBackupIndex=1,假设我将其更改为3。这是否意味着我将拥有文件generic1.log、generic2.log和generic3.log???不客气。本质上是的:我认为命名将更像generic.1.log等(更容易用globs解析/处理)
# 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