log4j2动态变量的默认值

时间:2016-02-19 12:18:47

标签: java configuration log4j2

我尝试通过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由多个记录器使用。每次加载一个记录器时,都应确定文件的路径,以便每个记录器写入自己的文件。字符集是次要的,虽然我想理解错误消息,因为我的错误理解可能意味着动态更改输出文件也可能失败。

1 个答案:

答案 0 :(得分:1)

charset属性不支持动态值。该属性是不可变的,并在创建模式布局时设置。您是否需要一个Appender来支持多个字符集?这会怎么样?