【问题标题】:Spring Boot and Logback by ExampleSpring Boot 和 Logback 示例
【发布时间】:2016-06-17 15:59:11
【问题描述】:

我有一个 Spring Boot 应用程序(基本上)具有以下项目结构:

myapp/
    src/
        <All Java source code here>
    build.gradle
    application.yml
    logback.groovy

它的build.gradle依赖是:

dependencies {
    compile(
        'org.springframework.boot:spring-boot-starter-actuator'
        ,'org.springframework.boot:spring-boot-starter-jetty'
        ,'org.springframework.boot:spring-boot-starter-security'
        ,'org.springframework.boot:spring-boot-starter-thymeleaf'
        ,'org.apache.commons:commons-lang3:3.4'
        ,'ch.qos.logback:logback-parent:1.1.7'
    )
    compile('org.springframework.boot:spring-boot-starter-web') {
        exclude module: 'spring-boot-starter-tomcat'
    }
}

application.yml

logging:
  level:
    org.springframework.web: 'DEBUG'
server:
  error:
    whitelabel:
      enabled: false
spring:
  datasource:
    test-on-borrow: true
    validation-query: SELECT 1
  messages:
    basename: i18n/messages

还有logback.groovy

statusListener(OnConsoleStatusListener)

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

appender('ROLLING', RollingFileAppender) {
    encoder(PatternLayoutEncoder) {
        Pattern = '%d %level %thread %mdc %logger - %m%n'
    }
    rollingPolicy(TimeBasedRollingPolicy) {
        FileNamePattern = '/Users/myuser/logs/myapp/myapp-%d{yyyy-MM}.zip'
    }
}

当我运行./gradlew bootRun -Pspring.config=.(其中spring.config=. 表示myapp/application.yml 配置文件)时,我只看到控制台输出。没有任何内容被记录到/Users/myuser/logs/myapp/。关于为什么的任何想法?


更新

我创建了一个准系统 Spring Boot 应用程序,它使用我相同的 Logback 配置:

https://github.com/hotmeatballsoup/spring-boot-logback-example

克隆它并通过运行来运行它:

./gradlew bootRun -Pspring.config=.

请注意,即使应用程序启动良好(您会看到很多 console 输出),它实际上并没有按预期创建 /var/log/spring-boot-logback-example/spring-boot-logback-example.log 文件!

【问题讨论】:

    标签: spring gradle spring-boot logback spring-boot-actuator


    【解决方案1】:

    添加到 logback.groovy 的关注

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

    【讨论】:

    • 感谢@Tom Van Rossom (+1) - 但在尝试了您的建议后,当应用程序运行时,我仍然没有在/Users/myuser/logs/myapp/下看到任何日志文件。
    • Groovy 不在类路径中?在build.gradle中添加“compile 'org.codehaus.groovy:groovy-all:2.4.4''。”logback.groovy”默认不会被拾取。
    • 嗨@Tom Van Rossom(再次+1)-但实际上我确实在类路径上有Groovy。我想你会更容易看到一个完整的工作代码示例。看看我的更新。如果可以,请克隆该项目并在本地运行它。您会注意到未创建日志文件。也许这会让您更好地了解为什么这不起作用。再次感谢!
    • 另外@Tom Van Rossom,只是一个短暂的想法,Spring Boot 应用程序是否需要以“prod 模式”(作为打包的 uberjar)运行,以便其日志记录系统获取 Logback 依赖项/配置?如果是这样,那将解释我所看到的。
    【解决方案2】:

    对您的代码进行以下更改后,我能够成功运行应用程序:

    1. 在声明 appender 之后,将 logback.groovy 中的 root(DEBUG, ["CONSOLE", "ROLLING"]) 行移至最后一行
    2. 我将日志文件的路径从/var/log 更改为主目录,并且日志开始出现在控制台和日志文件中。 /var/log目录没有生成日志的原因是权限不足

    【讨论】:

      【解决方案3】:

      创建一个src/main/resources 文件夹并将logback.groovy 放入其中。

      这对我来说适用于您的项目(从 Github 克隆)和以下 logback 文件:

      import ch.qos.logback.classic.encoder.PatternLayoutEncoder
      import ch.qos.logback.core.rolling.RollingFileAppender
      import ch.qos.logback.core.rolling.TimeBasedRollingPolicy
      
      import static ch.qos.logback.classic.Level.DEBUG
      
      appender("FILE", RollingFileAppender) {
        file = "logFile.log"
        rollingPolicy(TimeBasedRollingPolicy) {
          fileNamePattern = "logFile.%d{yyyy-MM-dd}.log"
          maxHistory = 30
        }
        encoder(PatternLayoutEncoder) {
          pattern = "%-4relative [%thread] %-5level %logger{35} - %msg%n"
        }
      }
      root(DEBUG, ["FILE"])
      

      【讨论】:

        【解决方案4】:

        使用 logback/spring boot 和 groovy 配置。自定义日志配置应该在一个名为 logback-spring.groovy 而不是 logback.groovy 的文件中 该文件应该存在于 src/main/resources 中。

        见参考spring boot logging docs

        【讨论】:

          猜你喜欢
          • 2015-06-08
          • 2023-04-04
          • 2019-01-19
          • 1970-01-01
          • 2018-07-25
          • 2020-07-18
          • 2016-04-25
          • 2017-01-21
          相关资源
          最近更新 更多