【问题标题】:Logback-test.xml configuration is producing two log files instead of one?Logback-test.xml 配置生成两个日志文件而不是一个?
【发布时间】:2016-08-16 06:08:41
【问题描述】:

当我停止运行我的 spring-boot 应用程序时,会生成 两个 日志文件,而不是 一个(应该有一个)。

我下面的Logback-test.xml 文件有什么问题可能导致此问题?

logback-test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <timestamp key="myTimestamp" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>

    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <logger name="org.springframework.web" level="INFO"/>

    <!-- Send debug messages to System.out -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- By default, encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS}  - %msg%n</pattern>
        </encoder>
    </appender>

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

        <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>2MB</MaxFileSize>
        </triggeringPolicy>

    </appender>

    <logger name="com.my.package" level="INFO" additivity="false">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>

    <!-- By default, the level of the root level is set to DEBUG -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

正在创建的两个文件是例如:

myLog-2016-04-22_15-47-30.126.log

and

myLog-2016-04-22_15-47-30.922.log

【问题讨论】:

  • 文件名模式一样吗?
  • 请看编辑谢谢
  • 你能不能尝试用普通的FileAppender替换滚动文件追加器
  • 好吧,这有什么区别?
  • 您能否在使用&lt;configuration debug="true"&gt; logback.qos.ch/manual/… 运行时在您的STDOUT 中给我们Logback 的输出

标签: java spring logging spring-boot logback


【解决方案1】:

时间戳是在解析配置时生成的。由于 Spring Boot 在启动期间会重新初始化一次 logback,因此会生成两个不同的时间戳,因此会生成两个文件。

您可以在配置中使用timeReferene="contextBirth" 来获取恒定时间戳。由于LoggerContext 没有被破坏,只需重置这应该可以工作:

<timestamp key="myTimestamp" timeReference="contextBirth" datePattern="yyyy-MM-dd'_'HH-mm-ss.SSS"/>

【讨论】:

  • 谢谢你的回答,我是不是真的按照你说的解决方法呢?
【解决方案2】:

您的logging.config 属性如何?您的问题可能是pathing(或属性文件中缺少的属性)。例如。应该看起来像这样:

logging.config=classpath:logback-test.xml

application-test.properties.

另一种可能是您有两个活动的个人资料。例如。您的test 个人资料和default 之一。在这种情况下,您可以通过 logback 中的条件配置来解决它。

有关详细信息,请参阅answer。另外,请参阅该答案的最后一条评论。 spring boot 1.3 包含一些关于使用 logback 处理多个配置文件的新功能:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-logback-extensions

【讨论】:

  • 我目前没有这个 logging.config 属性?我需要它吗?
  • 如果您正在设置特定于配置文件的日志记录配置,那么我认为是的。但是它可能的启动可以自己解决这个问题,但不是 100% 肯定。不过,明确一点也无妨。
【解决方案3】:

问题大概和这行有关:

<include resource="org/springframework/boot/logging/logback/base.xml"/>

包含的文件中的This version 包含给其他人以及them have a file appender 之一。由于您正在定义自己的附加程序(文件和控制台),因此您可能不需要包含 Spring Boot 基础文件。

【讨论】:

  • 不,我注释掉了,但仍然有 2 个日志文件?
  • 嗯,我看到您使用毫秒来定义文件名。也许这可能是 logback 初始化的错误。如果您将模式更改为不使用毫秒怎么办?
  • 另外,您使用的是哪个版本的 logback?
  • 不幸的是,我也没有工作,我删除了毫秒,但我仍然得到 2 个日志文件:一个比另一个大一秒
  • 您是否尝试按照@GuiSim 的建议添加&lt;configuration debug="true"&gt;
【解决方案4】:

这行得通吗?

<appender name="FILE" class="ch.qos.logback.core.FileAppender"">

    <file>C:\path\to\my\file\myLog-${myTimestamp}.log</file>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} - %msg%n</Pattern>
    </encoder>

<!--
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <FileNamePattern>myLog.%i{yyyy-MM-dd_HH:mm:ss.SSS}}.log</FileNamePattern>
        <MinIndex>1</MinIndex>
        <MaxIndex>10</MaxIndex>
    </rollingPolicy>
-->
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>50MB</MaxFileSize>
    </triggeringPolicy>

</appender>

【讨论】:

  • 不,我收到错误:原因:java.lang.IllegalStateException - [triggeringPolicy] 没有适用的操作,当前 ElementPath 是 [[configuration][appender][triggeringPolicy]]
  • 对不起,第一行末尾多了一个双引号。希望你删除它并尝试。
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2020-05-30
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多