【问题标题】:What is the expression language being used in log4.xml for accessing java system properties?log4.xml 中用于访问 java 系统属性的表达式语言是什么?
【发布时间】:2014-11-24 22:54:43
【问题描述】:

我在 log4j.xml 中使用表达式来设置严重性级别,但是我想知道我还能用这些表达式做什么。例如添加一些逻辑或更复杂的解析,我找不到 log4j.xml 文件支持的表达式语言。

例如,我想根据正在配置的应用程序的上下文设置一个动态名称的属性,这样我就可以使用 java 系统属性将该配置传达给同一应用程序的多个版本的 log4j 配置:

Application version 1 --> app1.mypackage.severity
Application version 2 --> app2.mypackage.severity

appX 在初始化时由应用程序容器解析,所以我的问题可以简化为知道如何连接两个表达式的值,但我找不到 log4j 使用的表达式语言是什么。

我想要这样的东西:

...
<logger name="mypackage" additivity="false">
    <level value="${$appVersion+$mypackage.severity}" />
    <appender-ref ref="dailyRollingFile" />
</logger>
...

【问题讨论】:

    标签: java xml log4j expression


    【解决方案1】:

    http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution

    本页介绍如何在 log4j 配置文件中使用变量。

    大多数 apache 工具的基本格式是相同的,例如 maven 和 ant。

    ${name}
    

    其中name 被定义为某处的属性(环境变量、系统属性、本地属性等)。检查链接以查看设置属性的各种方法。

    要在变量中嵌入变量,您可以在配置xml中使用本地属性定义,例如:

    <Properties>
      <Property name="loggerlevel">${appVersion}${mypackage:severity}</Property>
    </Properties>
    ...
    <logger name="mypackage" additivity="false">
      <level value="${loggerlevel}" />
      <appender-ref ref="dailyRollingFile" />
    </logger>
    

    【讨论】:

    • 也许这是一个仅在 log4j 2 中可用的功能,当我在 log4j 1.2.17 上尝试它时,它抛出了一些警告,例如:WARN Element type "Properties" must be declared。
    猜你喜欢
    • 2014-04-25
    • 2018-04-03
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2011-03-03
    • 2011-05-05
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多