分割共享配置文件后,Logback停止记录

时间:2015-06-08 14:31:58

标签: java logging configuration logback

我已经将logback引入了一个使用多个JVM的系统。该系统实际上是两个独立的项目,之前他们共享了一个外观配置文件,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true">
        <!-- general console appender -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{HH:mm:ss.SSS,CET}  %-5level [%file:%line] - %msg%n</pattern>
            </layout>
        </encoder>
        <target>System.out</target>
    </appender>

        <!-- Project1 appenders -->
    <appender name="project1ApplicationAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/project1/application/%d{yyyy-MM-dd}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 90 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>[%-5p] [%d{dd.MM.yyyy - HH.mm.ss.SSS,CET}] [%C{1} - %L] %X{ClientTraceId} %X{CallSequenceTrace} %m%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="project1ConnectorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/project1/connector/%d{yyyy-MM-dd}/connector.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 90 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>[%d{dd.MM.yyyy - HH.mm.ss.SSS,CET}] %m%n</Pattern>
            </layout>
        </encoder>
    </appender>

        <!-- project1 loggers -->
    <logger name="logger1project1" additivity="false">
        <level value="ALL"/>
        <appender-ref ref="project1ConnectorAppender"/>
    </logger>

    <logger name="logger2project1">
        <level value="INFO"/>
        <appender-ref ref="project1ApplicationAppender"/>
    </logger>

    <logger name="logger3project1">
        <level value="INFO"/>
        <appender-ref ref="project1ApplicationAppender"/>
    </logger>

        <!-- project2 appenders -->
    <appender name="project2ApplicationAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/project2/application/%d{yyyy-MM-dd}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 90 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>[%-5p] [%d{dd.MM.yyyy - HH.mm.ss.SSS,CET}] [%C{1} - %L] %X{ClientTraceId} %X{CallSequenceTrace} %m%n</Pattern>
            </layout>
        </encoder>

    </appender>

    <appender name="project2ConnectorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <prudent>true</prudent>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/project2/connector/%d{yyyy-MM-dd}/connector.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- or whenever the file size reaches 100MB -->
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- keep 30 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>[%d{dd.MM.yyyy - HH.mm.ss.SSS,CET}] %m%n</Pattern>
            </layout>
        </encoder>
    </appender>

        <!-- project2 loggers -->
    <logger name="logger1project2" additivity="false">
        <level value="OFF"/>
        <appender-ref ref="project2ConnectorAppender"/>
    </logger>

    <logger name="logger2project2">
        <level value="INFO"/>
        <appender-ref ref="project2ApplicationAppender"/>
    </logger>

    <root>
        <level value="INFO"/>
        <appender-ref ref="console"/>
    </root>

</configuration>

这样就可以了。 然后我们介绍了一个在两个项目中具有相同名称的新记录器,但我们仍然希望每个项目都有单独的文件,因此我们必须将配置文件拆分为两个。 当我们这样做时,其中一个项目停止了记录,我无法理解为什么。这是停止的项目的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

  <!-- general console appender -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>%d{HH:mm:ss.SSS,CET}  %-5level [%file:%line] - %msg%n</pattern>
      </layout>
    </encoder>
    <target>System.out</target>
 </appender>

  <!-- project2 appenders -->
  <appender name="project2ApplicationAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>/data/logs/project2/application/%d{yyyy-MM-dd}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!-- keep 90 days' worth of history -->
      <maxHistory>90</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>[%-5p] [%d{dd.MM.yyyy - HH.mm.ss.SSS,CET}] [%C{1} - %L] %X{ClientTraceId} %X{CallSequenceTrace} %m%n</Pattern>
      </layout>
    </encoder>
  </appender>

  <appender name="project2ConnectorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>/data/logs/project2/connector/%d{yyyy-MM-dd}/connector.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!-- keep 90 days' worth of history -->
      <maxHistory>90</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[CBM - %-5p] [%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"}] %m%n</pattern>
      </layout>
    </encoder>
  </appender>

  <appender name="project2PayloadAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <prudent>true</prudent>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>/data/logs/project2/payload/%d{yyyy-MM-dd}/payload.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
      <!-- keep 90 days' worth of history -->
      <maxHistory>90</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
      <layout class="ch.qos.logback.classic.PatternLayout">
        <pattern>[CBM - %-5p] [%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"}] %m%n</pattern>
      </layout>
    </encoder>
  </appender>

  <!-- project2 loggers -->
  <logger name="logger1project2" additivity="false">
    <level value="INFO" />
    <appender-ref ref="project2ConnectorAppender" />
  </logger>
  <logger name="newlogger" level="TRACE" additivity="false">
    <appender-ref ref="project2PayloadAppender" />
  </logger>
  <logger name="logger2project2" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="project2ApplicationAppender" />
  </logger>
  <root>
    <level value="INFO" />
    <appender-ref ref="project2ApplicationAppender" />
  </root>
</configuration>

我在每个JVM的java选项中添加了特定路径,如下所示:

-Dlogback.configurationFile={config path}

以前每个项目都是相同的,但现在是分开的。

另一条信息是系统部署在两台服务器上,每台服务器都有一份配置文件。并且它在其中一个服务器上运行良好,即使配置文件和部署过程完全相同。

我已经找到了整个工作日的解决方案而没有任何运气。

这是在实时生产环境中,所以我不能简单地进行系统的新部署,或从控制台读取状态消息。

我们有测试系统,但问题不存在,即使配置文件相似。

提前感谢您的任何答案!

0 个答案:

没有答案