Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从YAML文件自动配置log4j 2时出现问题_Java_Build.gradle_Log4j2 - Fatal编程技术网

Java 从YAML文件自动配置log4j 2时出现问题

Java 从YAML文件自动配置log4j 2时出现问题,java,build.gradle,log4j2,Java,Build.gradle,Log4j2,这是我的申请代码。运行时,只记录错误字符串。我可以看到yaml文件被复制到build/resources文件夹中。我无法诊断为什么自动配置不起作用,即使我遵循了命名约定并将yaml文件放置在正确的位置 public class App { private static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.trac

这是我的申请代码。运行时,只记录错误字符串。我可以看到yaml文件被复制到build/resources文件夹中。我无法诊断为什么自动配置不起作用,即使我遵循了命名约定并将yaml文件放置在正确的位置

public class App {
    private static final Logger logger = LogManager.getLogger();

    public static void main(String[] args) {
        logger.trace("Entering application.");
        logger.error("Some error");
        logger.trace("Exiting application.");
    }
}
我的身材,格雷德尔看起来像这样

plugins {
    id 'java'
    id 'application'
    id 'groovy'
}

repositories {
    jcenter()
}

dependencies {
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'


    implementation 'com.google.guava:guava:28.0-jre'
    testImplementation 'org.codehaus.groovy:groovy-all:2.5.7'
    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
    testImplementation 'junit:junit:4.12'
}

application {
    mainClassName = 'myapp.App'
}
我已经将log4j2.yaml文件放在src/main/resources下

Configuration:
  status: warn
  name: YAMLConfigTest
  properties:
    property:
      name: filename
      value: target/test-yaml.log
  thresholdFilter:
    level: debug
  appenders:
    Console:
      name: STDOUT
      PatternLayout:
        Pattern: "%m%n"
    File:
      name: File
      fileName: ${filename}
      PatternLayout:
        Pattern: "%d %p %C{1.} [%t] %m%n"
      Filters:
        ThresholdFilter:
          level: error

  Loggers:
    logger:
      -
        name: org.apache.logging.log4j.test1
        level: debug
        additivity: false
        ThreadContextMapFilter:
          KeyValuePair:
            key: test
            value: 123
        AppenderRef:
          ref: STDOUT
      -
        name: org.apache.logging.log4j.test2
        level: debug
        additivity: false
        AppenderRef:
          ref: File
    Root:
      level: debug
      AppenderRef:
        ref: STDOUT
更新 我重新阅读了文档,他们提到JSON和YAML配置文件需要额外的依赖项才能工作。我错过了它,因为我只看了第一段和样本文件。 将Jackson Core和数据绑定依赖项添加到my build.gradle允许配置生效

  // for JSON and YAML configs
  compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.10.3'
  compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.3'

  compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'
  compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'

您的记录器是在调试级别配置的。第一个和第三个日志记录调用位于跟踪级别。跟踪比调试更细粒度,因此不会记录这些跟踪。这只会留下错误日志事件。由于默认情况下,应用程序正在使用的记录器的名称将是“App”,因此它将使用根记录器,根记录器将其路由到控制台。

您的记录器是在调试级别配置的。第一个和第三个日志记录调用位于跟踪级别。跟踪比调试更细粒度,因此不会记录这些跟踪。这只会留下错误日志事件。由于默认情况下,应用程序正在使用的记录器的名称将是“App”,因此它将使用根记录器,根记录器将其路由到控制台。

我将跟踪方法更改为debug,但它不起作用。然而,我重新阅读了官方文件。他们提到您需要在类路径上为JSON和YAML配置额外的.jar。我在build.gradle中添加了Jackson core和databind,配置生效了@karanveer41,你能分享成功的gradle.build吗?我也有同样的问题,当然。我添加了更新的依赖项,其余的构建梯度是相同的。我将跟踪方法更改为调试,但它不起作用。然而,我重新阅读了官方文件。他们提到您需要在类路径上为JSON和YAML配置额外的.jar。我在build.gradle中添加了Jackson core和databind,配置生效了@karanveer41,你能分享成功的gradle.build吗?我也有同样的问题,当然。我添加了更新的依赖项,其余的构建梯度是相同的。