【问题标题】:Slf4j with log4j2 not working Spring boot 1.4.3.RELEASE带有 log4j2 的 Slf4j 无法正常工作 Spring boot 1.4.3.RELEASE
【发布时间】:2017-05-18 02:22:32
【问题描述】:

我使用的是 Spring boot 1.3.6.RELEASE 和 log4j2.yml 如下:

Configuration:
  status: info

  Properties:
    Property:
      name: log-path
      value: "/dvl-log/pol/apps/logs/api"

  Appenders:
    Console:
      - name: Console
        target: SYSTEM_OUT
        PatternLayout:
          Pattern: "%d{HH:mm:ss.SSS} %-5level %logger{1} - %msg%n"

  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: Console
    Logger:
    - name: com.company.api
      level: trace
      additivity: false
      AppenderRef:
        - ref: Console
          level: trace

使用以下代码的日志记录运行良好。

@Slf4j
public class LogExample{
      public void logMethods(String className,String methodName){

        log.trace("{} >> {}", className, methodName);
      }
}

但是当我升级到 Spring Boot 1.4.3.RELEASE 时,记录器不工作了。

我升级到 1.4.3 后的新 build.gradle 是(只是版本变化)

version '1.0'
// dependencies for command line
buildscript {
    ext {
        springBootVersion = '1.4.3.RELEASE'
        dependencyManagementVersion = '0.5.2.RELEASE'
    }
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        classpath "io.spring.gradle:dependency-management-plugin:${dependencyManagementVersion}"
    }
}

apply plugin: "io.spring.dependency-management"
apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'war'
apply plugin: 'eclipse'
apply plugin: 'idea'

// JDK 8
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

repositories {
    jcenter()
}

ext {
    springCloudVersion = 'Brixton.SR4'
    springBootVersion = '1.4.3.RELEASE'
    swaggerVersion = '2.4.0'
    jodaTimeVersion = '2.9.4'
    jacksonJodaVersion = '2.5.1'
    junitVersion = '4.12'
    springWsTestVersion = '2.2.3.RELEASE'
    lombokVersion = '1.16.10'
    jsonPathVersion = '2.2.0'
    ehcacheVersion = '3.2.0'
    javaxCacheVersion = '1.0.0'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
    }
}

sourceSets {
    test {
        java {
            srcDir 'src/test/unit/java'
        }
        resources {
            srcDir 'src/test/unit/resources'
        }
    }
}

dependencies {

    /* core libraries */
    compile('org.springframework.cloud:spring-cloud-starter-config') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    compile('org.springframework.boot:spring-boot-starter-web') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    compile("org.springframework.boot:spring-boot-starter-hateoas"){
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    compile 'org.springframework.ws:spring-ws-core'

    // logging
    compile('org.springframework.boot:spring-boot-starter-log4j2')
    compile('com.fasterxml.jackson.dataformat:jackson-dataformat-yaml')
    compile('com.fasterxml.jackson.core:jackson-databind')

    // embedded server
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')


    // https://mvnrepository.com/artifact/org.projectlombok/lombok-maven
    compile "org.projectlombok:lombok:${lombokVersion}"

    // https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path
    // A Java DSL for reading JSON documents
    compile "com.jayway.jsonpath:json-path:${jsonPathVersion}"


    /* plugins */

    /* test libraries */
    // unit
    testCompile "junit:junit:${junitVersion}"
    testCompile "org.springframework.boot:spring-boot-starter-test"
    testCompile "org.springframework.ws:spring-ws-test:${springWsTestVersion}"
}

war {
    archiveName = "${project.name}.war"
}

我在这里缺少什么? TIA

我想添加更多详情: 升级到 Spring Boot 1.4.3 后,类路径上有 log4j-api:2.6.2、log4j-core:2.6.2 和 log4j-slf4j-impl:2.2.6。问题是附加程序不适用于trace 级别,因为我正在获取info 或更高级别的日志。

【问题讨论】:

  • 升级后检查 log4j2 是否在你的类路径中。
  • @phani 升级后类路径上有 log4j-api:2.6.2、log4j-core:2.6.2 和 log4j-slf4j-impl:2.2.6 ... 事情是 appender 不是为跟踪级别工作,因为我正在获取信息或更高级别的日志。
  • 我没有使用 log4j2 的第一手经验,所以我只能提供一些输入:考虑到某种形式的日志记录正在工作,我猜这个问题是由于 log4j2.yml 的内容造成的.在新旧版本之间检查 SpringBoot 更新版本的 log4j2。
  • @phan 我认为log4j2.yml 应该独立于 Spring Boot 版本,对吧?相同的 log4j2.yml 适用于 Spring Boot 1.3.6,为什么它不适用于 1.4.3?我真的不明白这个。
  • @phani 非常感谢您抽出宝贵的时间。最后我解决了这个问题。我已经发布了我解决问题的方式,如果您有任何进一步的建议,请告诉我:)

标签: spring logging spring-boot log4j slf4j


【解决方案1】:

我通过将log4j2.yml 直接移动到resource 目录中解决了这个问题。

之前,在 Spring Boot 1.3.6 中,我将 log4j2.yml 放在 resources/logging 目录下,其中 configuration.yml 为

logging:
  config: classpath:logging/log4j2.yml

我不知道为什么它不适用于 1.4.3.RELEASE。

【讨论】:

    猜你喜欢
    • 2019-08-06
    • 2018-08-25
    • 2018-06-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2016-06-25
    • 2023-02-22
    相关资源
    最近更新 更多