xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="off">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d - %c.%M [%t] %p %X{mdc} %x - %m%n" />
</Console>
<RollingFile name="RollingFile" append="true">
<filename>/export/Logs/ProductStockEs.local/esproduct.log</filename>
<filePattern>/export/Logs/ProductStockEs.local/esproduct.log.%d{yyyy-MM-dd}</filePattern>
<PatternLayout>
<Pattern>%d - %c.%M [%t] %p %X{mdc} %x - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile >
</Appenders>
<Loggers>
<!-- 业务日志 -->
<logger name="com.jw.es" level="INFO"/>
<Root level="info">
<AppenderRef ref="RollingFile"/>
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
properties配置
status = off
name = PropertiesConfig
### console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d - %c.%M [%t] %p %X{mdc} %x - %m%n
### RollingFile
appender.rolling.type = RollingFile
appender.rolling.name = FILE
appender.rolling.append = true
appender.rolling.fileName = @logpath@
appender.rolling.filePattern = @logPattern@
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d - %c.%M [%t] %p %X{mdc} %x - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
### logger
logger.rolling.name = com.jd.wj.es
logger.rolling.level = INFO
logger.rolling.additivity = true
logger.rolling.appenderRef.rolling.ref = FILE
### rootLogger
rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT
这个配置功能是一样的。
注意一点:logger.rolling.additivity = true的作用是将该logger日志在控制台也打印,如果是false,则只会打印到esproduct.log文件中。
@filename@是通过maven打进去的。
吐槽log4j2:
文档写的不好,好多配置都是慢慢碰出来的。尤其是对log4j配置不了的前提下。
关于日志路径配置问题,刚开始是通过log4j2.xml进行配置,无法配置dev、stage、prod不同环境的日志路径。官方给出了一些方案,比如可以通过ctx、env、sys等配置,但是问题来了,通过env配置会导致项目可读性差,放弃;想通过sys配置,将sys通过spring进行注入,但是特么log4j2的启动要比spring快,导致需要这个配置时没有,不知道如何让log4j2的初始化比spring晚,放弃。想到可以使用properties,路径通过maven打进去,就是@filename@的作用。
整体感觉log4j2的易用性比较低,性能可能好,但是切换起来比较麻烦,不如logback好配置。