如何为log4j2定义全局模式布局?

2022-09-02 10:37:24

是否可以在配置文件中定义(命名)?PatternLayoutlog4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
  <configuration status="ERROR">
    <appenders>
      <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
      </Console>

      <File name="DEBUG_FILE" fileName="debug.txt">
        <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
      </File>
    </appenders>

    <loggers>
      <root level="trace">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
      </root>
    </loggers> 

</configuration>

在此示例中,重复了 。我是否可以用名称以某种方式全局定义它,然后只使用名称引用来设置每个追加器的模式?PatternLayout


答案 1

根据官方文档,您可以定义“属性”并重用其值。

在本例中,我正在定义属性。appenderPatternLayout

以下是完整的代码(使用Log4J 2.3测试):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <Properties>
        <Property name="appenderPatternLayout">%d %-5p %C{2} (%F:%L) - %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="${appenderPatternLayout}" />
        </Console>
        <File name="DEBUG_FILE" fileName="debug.txt">
            <PatternLayout pattern="${appenderPatternLayout}" />
        </File>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="CONSOLE" />
            <AppenderRef ref="DEBUG_FILE" />
        </Root>
    </Loggers> 
</Configuration>

答案 2

找到它:

定义:

    <Properties>
        <property name="path">c:/logs/</property>
    </Properties>

用:

   <RollingFile fileName="${path}mylog.log"

推荐