Неисправность автоконфигурирования log4j 2 из файла YAML - PullRequest
0 голосов
/ 07 апреля 2020

Это код моего приложения. При запуске регистрируется только строка ошибки. Я вижу файл 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.");
    }
}

Мой build.gradle выглядит так это.

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 и Databind в мой build.gradle позволило вступить в силу конфигурации.

1 Ответ

0 голосов
/ 08 апреля 2020

Ваши регистраторы настроены на уровне отладки. Первый и третий вызовы журнала находятся на уровне трассировки. Трассировка более детализирована, чем отладка, поэтому она не будет записана. Это оставляет только ваше событие журнала ошибок. Поскольку по умолчанию имя для Logger, которое использует ваше приложение, будет «App», оно будет использовать регистратор root, который направит его на консоль.

...