根据Log4j 2文档中CSV Layout的说明,它依赖于Apache Commons CSV。
以下是可工作的代码片段。
pom.xml
...
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
...
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="csvLog.fileName">csvLog</Property>
<Property name="file-header">column1,column2,column3</Property>
</Properties>
<Appenders>
<RollingFile name="csvFile"
fileName="${csvLog.fileName}.tmp"
filePattern="${csvLog.filename}-%d{MM-dd-yyyy}-%i.csv" >
<CsvParameterLayout delimiter="," header="${file-header}\n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="200" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug" additivity="false">
<AppenderRef ref="csvFile" level="debug"/>
</Root>
</Loggers>
</Configuration>
Java代码片段
Logger logger = LogManager.getLogger(...)
logger.info("sample output", "foo", "bar")
输出csvLog.tmp
column1,column2,column3
foo,bar
edit
log4j2.properties
appenders = csvFile
appender.csvFile.type = RollingFile
appender.csvFile.name = CSVFILE
appender.csvFile.fileName = csvLog.tmp
appender.csvFile.filePattern= csvLog-%d{MM-dd-yyyy}-%i.csv
appender.csvFile.layout.type = CsvParameterLayout
appender.csvFile.layout.delimiter = ,
appender.csvFile.layout.header = column1,column2,column3\n
appender.csvFile.policies.type = Policies
appender.csvFile.policies.time.type = TimeBasedTriggeringPolicy
appender.csvFile.policies.time.interval = 1
appender.csvFile.policies.time.modulate = true
appender.csvFile.policies.size.type = SizeBasedTriggeringPolicy
appender.csvFile.policies.size.size=10MB
appender.csvFile.strategy.type = DefaultRolloverStrategy
appender.csvFile.strategy.max = 200
rootLogger.level = debug
rootLogger.appenderRefs = csvFile
rootLogger.appenderRef.csvFile.ref = CSVFILE