Spring 启动应用遇到 logback.groovy 配置文件问题

Spring Boot app having trouble with logback.groovy config file

我正在尝试让 Spring 引导与 Logback 一起工作,并且 运行 进入我无法理解的 error/issue。

为了完整重现这个问题,我在 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 启动应用程序应该没有问题在那里创建日志文件并写入它们。

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

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

#logback.classic pattern: %msg%n

这告诉我,我的 logback.groovyFileAppender 中可能配置有误?任何 ideas/thoughts?

您的应用程序正常运行(网页加载正确并显示 "Greetings from Spring Boot!"),您的日志记录配置有点不稳定。

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

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

日志有效。没有这个,附加器被初始化,文件用 "weird header" 创建(因为你选择使用 outputPatternAsHeader = true),并且没有任何东西被附加,因为你选择不。

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

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

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