【问题标题】:Logback is not using configuration fileLogback 没有使用配置文件
【发布时间】:2015-12-17 19:10:43
【问题描述】:

我正在尝试将进程日志保存到文件中。当我在 netbeans 中运行该类时,这工作正常,但在我导出 JAR 文件后,进程无法选择 logback.xml。

jar 文件与 logback.xml 位于同一路径。我已经尝试使用在这里找到的所有示例:

使用命令行文件:

java -Dlogback.configurationFile=logback.xml test.jar 

设置类路径:

java =cp "./" -jar test.jar 

这是配置文件:

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %M:%L- %msg%n</Pattern> -->
            <Pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} %M:%L - %msg%n
            </Pattern>
            <!--<Pattern>%d{dd/MM/yyyy HH:mm:ss.SSS} [%thread] %-5level %C{0}:%L - 
                %msg%n</Pattern> -->
        </encoder>
    </appender>



    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>test.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>test.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <!--<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> -->
            <pattern>%d{dd/MM/yyyy HH:mm:ss.SSS} [%thread] %-5level %C{0}:%L -
                %msg%n</pattern>
        </encoder>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

请帮忙!谢谢

【问题讨论】:

  • 为什么配置文件不在jar里面?
  • 我不知道。应该在吗?无论如何..我尝试在 JAR 文件中添加 xml,但它一直使用默认配置,
  • 您似乎遗漏了配置中的&lt;configuration&gt; 标签,还是您将它们遗漏了?
  • 我在复制/粘贴时出错了。但就像我说的,这适用于 Netbeans。但是如果我使用jar,例如eclipse,总是使用默认配置。文件在哪里并不重要。
  • 好吧,它在类路径中寻找logback.xml。这很简单。

标签: java logback


【解决方案1】:

我发现了问题:

我的类路径中有 logback.*.jar 和 slf4j-api-simple-1.7.12.jar。所以它使用简单而不是 logback。

我删除了简单,现在可以完美运行。

谢谢!

【讨论】:

    【解决方案2】:

    事实证明,我对“slf4j-simple”有一个依赖项(传递性,maven),即使 logback 也存在,这也是“有利于内置默认值:logback”的首选。不容易弄清楚...还要寻找任何其他无关的 slf4j 绑定,例如 log4j...

    还请注意,您可能需要执行 maven mvn dependency:tree 来查找所有依赖项,因为 Effective-pom 仅显示“编译”时间依赖项,而不是运行时(后者也包含在阴影 jars 中......)。

    在我的特殊情况下,修复是从依赖项本身中排除 slf4j-simple(本例中为 postgresql jdbc)。

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2019-12-03
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多