【问题标题】:log4j2 Default Value for Dynamic Variablelog4j2 动态变量的默认值
【发布时间】:2016-02-19 12:18:46
【问题描述】:

我尝试通过 log4j2.xml 为变量 log4j.encoding 定义一个默认值:

<Properties>
  <Property name="log4j.encoding">ISO-8859-15</Property>
</Properties>

我将其用作在运行时解析的变量:

<PatternLayout charset="$${sys:log4j.encoding}" pattern="%msg%n"/>

此配置导致如下错误:

main WARN Error while converting string [${sys:log4j.encoding}] to type [class java.nio.charset.Charset]. Using default value [null].

但是当我改用非动态变量时(即${sys:log4j.encoding},注意单个$),在加载配置文件时计算一次,配置成功。

默认值对动态变量不起作用是预期的行为吗?

详细信息:定义 PatternLayout 的 RollingFile 被多个记录器使用。每次加载其中一个记录器时都应确定文件的路径,以便每个记录器写入自己的文件。字符集是次要的,尽管我想理解错误消息,因为我的错误理解可能意味着动态更改输出文件也可能失败。

【问题讨论】:

    标签: java configuration log4j2


    【解决方案1】:

    charset 属性不支持动态值。该属性是不可变的,并在创建模式布局时设置。您是否需要单个 Appender 来支持多个字符集?这将如何运作?

    【讨论】:

    • 我在原始问题中添加了详细信息部分。如何知道属性是否支持动态值?
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 2011-09-22
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2013-01-17
    相关资源
    最近更新 更多