一次日志文件分割修复过程

         现有一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" />-->
            <!--&lt;!&ndash;可配置多个大数据入口&ndash;&gt;-->
            <!--<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>

 之后编译放服务器打包放服务器重启,再查看日志文件发现生成成功了。

    为什么本地之前就可以还没找到原因

猜你喜欢

转载自www.cnblogs.com/fade-away/p/9179169.html
今日推荐