使用log4j2yaml中的属性

使用log4j2yaml中的属性,yaml,log4j2,Yaml,Log4j2,我试图在log4j2.yaml中使用属性。等价的XML是这样的 <Configuration> <Properties> <Property name="log-path">logs</Property> <Property name="archive">${log-path}/archive</Property> </Properties> <Appenders> . . . 但这

我试图在log4j2.yaml中使用属性。等价的XML是这样的

<Configuration>
<Properties>
    <Property name="log-path">logs</Property>
    <Property name="archive">${log-path}/archive</Property>
</Properties>
<Appenders>
. . .
但这些房产并没有被挑选出来。例如,以下代码创建一个${log path}文件夹来存储日志文件,而不是所需的日志文件夹

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

我做错了什么?

如果查看log4j2.json文件,您可以看到
属性
键必须具有一个值,该值是(再次)键-值对列表。已翻译为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
(上面的代码是使用json log4j2.json中的
yaml进行转换的,命令是从

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


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

如果我只有一个名称/值对,事情就会成功。但是,在添加第二个名称/值对时,问题再次出现。我在使用JSON和JSON ar时遇到了类似的问题ray就是解决方案。@user2693135我以前没有注意到:YAML中的映射不能有相同的键。我用一个可能的解决方案更新了我的答案。你能用一个JSON版本示例(使用数组)更新你的帖子吗?@user2693135的结构与我猜测的略有不同。我更新了我的答案,在YAML中使用与JSON文件中相同的结构YAML数组sux:(谢谢你的回答,它帮助了我
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