我一直在努力使用Log4j中的CsvParameterLayout生成CSV文件。我已将log4j2配置文件编码如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="csvLog.fileName">C:/ql/logs/csvLog</Property>
</Properties>
<Appenders>
<RollingFile name="csvFile" fileName="${csvLog.fileName}.tmp"
filePattern="${csvLog.filename}-%d{MM-dd-yyyy}-%i.csv" header="${file-header}">
<CsvParameterLayout delimeter=","/>
<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>
但是,我无法生成所需的CSV文件。有人可以帮我吗?同样在将来,我想在我将使用线程上下文生成的所有打印内容之前添加一个唯一的ID。
请帮忙。
遵循CSV布局的Log4j 2文档之后,它取决于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
编辑
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句