现有一springboot框架服务OrderReviewer,日志框架是log4j2,之前是按天分割日志,配置文件log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <properties> <!--定义本地存储位置--> <property name="LOG_HOME">/tmp/logs/offcounter/OrderReviewer</property> <property name="LOG_TRANSFER_HOME">/tmp/logs/offcounter/Transfer</property> <!--定义应用名称--> <property name="APP_NAME">OrderReviewer</property> <property name="TRANSFER_NAME">Transfer</property> </properties> <Appenders> <!--<Console name="CONSOLE" target="SYSTEM_OUT">--> <!--定义日志格式--> <!--<PatternLayout--> <!--pattern="${APP_NAME} %-d{yyyy-MM-dd HH:mm:ss} [%-5p] (%c{1}:%L) %m%n" />--> <!--</Console>--> <RollingRandomAccessFile name="RFILE" fileName="${LOG_HOME}/${APP_NAME}" filePattern="${LOG_HOME}/${APP_NAME}.%d{yyyy-MM-dd-HH}.log"> <PatternLayout pattern="${APP_NAME} %-d{yyyy-MM-dd HH:mm:ss} [%-5p] (%c{1}:%L) %m%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingRandomAccessFile> <RollingRandomAccessFile name="TFILE" fileName="${LOG_TRANSFER_HOME}/transferData.log" filePattern="${LOG_TRANSFER_HOME}/${TRANSFER_NAME}.%d{yyyy-MM-dd}.log"> <PatternLayout pattern="${TRANSFER_NAME} %-d{yyyy-MM-dd HH:mm:ss} [%-5p] (%c{1}:%L) %m%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> </Policies> </RollingRandomAccessFile> <!--<Flume name="eventLogger" compress="true">--> <!--<Agent host="localhost" port="41414" />--> <!--<!–可配置多个大数据入口–>--> <!--<Agent host="localhost" port="41414" />--> <!--<RFC5424Layout enterpriseNumber="18060" includeMDC="true"--> <!--appName="${APP_NAME}" />--> <!--</Flume>--> <!--三个appender使用异步非阻塞方式--> <Async name="Async"> <appender-ref ref="CONSOLE" /> <appender-ref ref="RFILE" /> <!--<appender-ref ref="eventLoggertLogger" />--> </Async> </Appenders> <Loggers> <!-- 数据迁移日志单独输出 --> <Logger name="com.gf.offcounter.log.TransferDataLog" level="INFO" additivity="false"> <AppenderRef ref="TFILE"/> </Logger> <Root level="INFO"> <AppenderRef ref="Async" /> </Root> </Loggers> </Configuration>
由于数据量变大,希望按小时来切分,每小时生成一个日志文件。
百度查看及看官方文档都是说filePattern设置到小时就ok。修改log4j2.xml,为了测试需要,按每分钟生成一个日志文件
filePattern="${LOG_TRANSFER_HOME}/${TRANSFER_NAME}.%d{yyyy-MM-dd-HH-mm}.log"
重启。过几分钟看日志文件,发现没有生成OrderReviewer.2018-06-13-09.log的文件,重试了几次都不行。尝试用官方给的demo
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" filePattern="logs/app-%d{yyyy-MM-dd-HH-mm}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="0 * * * * ?"/>
<SizeBasedTriggeringPolicy size="2 MB"/>
</Policies>
<DirectWriteRolloverStrategy maxFiles="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
同样的没有按配置的时间生成日志文件,本地测试发现是可以按配置的时间生成日志文件,再到f服务器尝试还是不行。
服务器上部署了几个服务,把相同的log4j2.xml配置给另外一个服务OrderConfig发现也可以按分钟生产日志文件。比较两个服务的环境配置,基本都一样没区别。再比较两个服务引用的log4j包发现OrderReviwer服务比OrderConfig多了log4j-1.2.12.jar,在查导入log4j-1.2.12.jar的依赖
有可能是jar包冲突了?去掉log4j
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
之后编译放服务器打包放服务器重启,再查看日志文件发现生成成功了。
为什么本地之前就可以还没找到原因