【问题标题】:Spring Boot multiple log4j appenders in application.yml file在 application.yml 文件中 Spring Boot 多个 log4j 附加程序
【发布时间】:2022-01-04 19:41:52
【问题描述】:

我的 SpringBoot 应用程序需要 2 种不同的日志记录模式。

假设:

first_pattern  -- for root logger (INFO level)
second_pattern -- for packages com.stackoverflow.engine.core (DEBUG level)

两个包都必须记录到标准输出。

是否可以在 application.yml 中进行配置?
(不在 XML 或属性文件中,而是在 YML 中)

非常感谢!

【问题讨论】:

    标签: spring spring-boot logging yaml log4j


    【解决方案1】:

    不,你不能单独使用 Spring 配置来获得这样的配置。 Spring Boot 仅支持所有日志记录框架共有的几个配置选项(参见documentation)。

    如果你想要更复杂的配置,你需要使用你正在使用的特定日志框架的原生配置格式。

    如果您使用的是 Log4j 2.x,您可以扩展 default Spring configuration 并将其保存为 log4j2-spring.yml 在您的类路径中:

    Configuration:
      packages: org.springframework.boot.logging.log4j2
      properties:
        property:
          - name: LOG_EXCEPTION_CONVERSION_WORD
            value: "%xwEx"
          - name: LOG_LEVEL_PATTERN
            value: "%5p"
          - name: LOG_DATEFORMAT_PATTERN
            value: "yyyy-MM-dd HH:mm:ss.SSS"
          - name: CONSOLE_LOG_PATTERN
            value: "%clr{%d{${sys:LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${sys:LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}"
          - name: FILE_LOG_PATTERN
            value: "%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} %pid --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}"
    
      appenders:
        appender:
          - name: Console
            type: Console
            PatternLayout:
              pattern: "${sys:CONSOLE_LOG_PATTERN}"
          - name: Console2
            type: Console
            PatternLayout:
              pattern: "Pattern2 %d %p %c{1.} [%t] %m%n"
    
      loggers:
        logger:
          - name: com.stackoverflow.engine.core
            level: DEBUG
            additivity: false
            AppenderRef:
              - ref: Console2
        root:
          level: INFO
          AppenderRef:
            - ref: Console
    

    备注:要使用 YAML 格式,需要在依赖项中添加 jackson-datatype-yaml。如果你使用 Maven 添加:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
        <!-- version managed by Spring Boot -->
    </dependency>
    

    【讨论】:

    • Piotr P. Karwasz 很好的答案!谢谢!祝你有美好的一天!
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2018-11-13
    • 2011-09-04
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    相关资源
    最近更新 更多