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.groovy
的 FileAppender
中可能配置有误?任何 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'
,因为如果这样做错误,服务器将关闭,显然页面将无法加载。
如果路径指向存在且可写的东西,它将起作用。
我正在尝试让 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.groovy
的 FileAppender
中可能配置有误?任何 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'
,因为如果这样做错误,服务器将关闭,显然页面将无法加载。
如果路径指向存在且可写的东西,它将起作用。