【问题标题】:Spring Boot app having trouble with logback.groovy config fileSpring Boot 应用程序在 logback.groovy 配置文件中遇到问题
【发布时间】:2017-06-13 01:25:23
【问题描述】:

我正在尝试让 Spring Boot 与 Logback 一起使用,但遇到了一个我无法弄清楚的错误/问题。

为了完整重现这个问题,我在 GitHub 上创建了一个Spring Boot Example repo,但本质上,这是我的application.yml

logging:
  config: 'logback.groovy'
server:
  port: 9200
  error:
    whitelabel:
      enabled: false

还有我的logback.groovy

statusListener(OnConsoleStatusListener)

def LOG_PATH = '/opt/springbootexample/logs/springbootexample'

appender('CONSOLE', ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        pattern = '%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n'
    }
}

appender('FILE', FileAppender) {
    file = "${LOG_PATH}.log"
    encoder(PatternLayoutEncoder) {
        pattern = '%msg%n'
        outputPatternAsHeader = true
    }
}

appender('ROLLING', RollingFileAppender) {
    encoder(PatternLayoutEncoder) {
        Pattern = '%d %level %thread %mdc %logger - %m%n'
    }
    rollingPolicy(TimeBasedRollingPolicy) {
        fileNamePattern = "${LOG_PATH}-%d{yyyy-MM}.zip"
        maxHistory = 30
        totalSizeCap = '1KB'
    }
}

root(INFO, ["CONSOLE", "ROLLING"])

我已经确定 /opt/springbootexample/logs 存在我运行了 chmod -R 777 /opt/springbootexample,所以我的 Spring Boot 应用程序应该没有问题在那里创建日志文件并写入它们。

当我在本地运行应用程序时,我没有收到任何错误/异常/警告;控制台输出中的一切看起来都很好。然后我启动一个浏览器并将其指向http://localhost:9200,它应该返回一个简单的虚拟消息,但是没有任何反应。更糟糕的是,控制台中也没有任何反应。

唯一的线索是,在我关闭应用后,如果我去/opt/springbootexample/logs/springbootexample.log,它的内容是:

#logback.classic pattern: %msg%n

这告诉我,我的logback.groovyFileAppender 中可能有一些配置错误?有什么想法/想法吗?

【问题讨论】:

    标签: spring-boot logback fileappender logback-groovy


    【解决方案1】:

    您的应用程序工作正常(网页正确加载并显示“来自 Spring Boot 的问候!”),您的日志记录配置有点不稳定。

    第一个问题是您忘记将非滚动文件附加程序添加到您的根记录器。只需将"FILE" 添加到logback.groovy 底部的列表中,如下所示:

    root(INFO, ["FILE", "CONSOLE", "ROLLING"])
    //          ^^^^^^^
    

    并且日志有效。没有这个,appender 会被初始化,文件会使用“奇怪的头”创建(因为你选择使用outputPatternAsHeader = true),并且什么都不会附加,因为你选择不这样做。

    所以唯一奇怪的问题是为什么网页没有为你加载......但如果日志有效,也许你会得到更多信息:)

    LOG_PATH 尝试更简单的方法,例如def LOG_PATH = '/tmp/foo',因为如果错误,服务器将关闭,显然页面将无法加载。

    如果路径指向存在且可写的东西,它将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2018-06-20
      • 1970-01-01
      相关资源
      最近更新 更多