【问题标题】:Using Properties in Log4J2 YAML在 Log4J2 YAML 中使用属性
【发布时间】:2016-07-04 17:33:39
【问题描述】:

我正在尝试使用 log4j2.yaml 中的属性。等效的 XML 是这样的。

<Configuration>
<Properties>
    <Property name="log-path">logs</Property>
    <Property name="archive">${log-path}/archive</Property>
</Properties>
<Appenders>
. . .

我试过了。

Configutation:
  name: Default
  properties:
    property:
      name: log-path
      value: "logs"
      name: archive
      value: ${log-path}/archive
  Appenders:

但是属性没有被选中。例如,以下代码创建一个 ${log-path} 文件夹来存储日志文件,而不是所需的 logs 文件夹。

fileName: ${log-path}/rollingfile.log

我做错了什么?

【问题讨论】:

    标签: yaml log4j2


    【解决方案1】:

    如果您查看 log4j2.json 文件,您可以看到 property 键必须有一个值,即(再次)键值对列表。翻译成 YAML,这看起来像这个文件的开头:

    configuration:
      name: Default
      properties:
        property:
        - name: log-path
          value: logs
        - name: archive
          value: ${log-path}/archive
      appenders:
        Console:
          PatternLayout:
            pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
          name: Console-Appender
          target: SYSTEM_OUT
        File:
          PatternLayout:
            pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
          fileName: ${log-path}/logfile.log
          name: File-Appender
        RollingFile:
          DefaultRolloverStrategy:
            max: '30'
          PatternLayout:
            pattern: '[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n'
          Policies:
            SizeBasedTriggeringPolicy:
              size: 1 KB
          fileName: ${log-path}/rollingfile.log
          filePattern: ${archive}/rollingfile.log.%d{yyyy-MM-dd-hh-mm}.gz
          name: RollingFile-Appender
      loggers:
        logger:
          additivity: 'false'
          appender-ref:
          - level: info
            ref: Console-Appender
          - level: error
            ref: File-Appender
          - level: debug
            ref: RollingFile-Appender
          level: debug
          name: guru.springframework.blog.log4j2json
        root:
          appender-ref:
            ref: Console-Appender
          level: debug
    

    (上面是使用yaml from-json log4j2.json转换的,命令是从ruamel.yaml.cmd安装的

    当然可以保证这是可行的,因为有多种方法可以将 XML 层次结构转换为 YAML。但是 YAML 和 JSON 的解析不太可能有区别。

    ${} 的扩展必须在加载 YAML 文件后,通过遍历数据结构来完成,这不太可能通过以不区分大小写的方式匹配原始映射键来完成。

    【讨论】:

    • 如果我只有一个名称/值对,一切正常。但是,在添加第二个名称/值对时,问题再次出现。我在使用 JSON 时遇到了类似的问题,而 JSON 数组就是解决方案。
    • @user2693135 我之前没有注意到:你不能在 YAML 中为映射使用相同的键。我用可能的解决方案更新了我的答案。您能否使用有效的 JSON 版本示例(使用数组)更新您的帖子?
    • @user2693135 的结构与我的猜测略有不同。我更新了答案以在 YAML 中使用与 JSON 文件中相同的结构
    • yaml arrays sux :(谢谢你的回答,它帮助了我
    猜你喜欢
    • 2018-08-17
    • 2019-07-30
    • 1970-01-01
    • 2018-08-03
    • 2018-08-10
    • 2015-11-24
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多