首页 > 解决方案 > 如何将 log4j 与具有动态文件名的多个附加程序一起使用?

问题描述

我想多次使用 log4j-Appender,但文件名不同:

附加器:

<RollingFile name="MODULE" fileName="log/module-${ModuleName}.log" append="true" filePattern="log/module-${ModuleName}-%d{yyyy-MM-dd}_%i.log" >
    <PatternLayout pattern="%d{yyyy/MM/dd-HH:mm:ss} %-5p %C:%M:%L ~ %m%n"/>
    <Policies>
        <OnStartupTriggeringPolicy />
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="100MB"/>
    </Policies>
    <DefaultRolloverStrategy max="10"/>
</RollingFile>

记录器:

<Logger name="MOD1" level="debug">
    <Properties>
        <Property name="ModuleName">MOD1</Property>
    </Properties>
    <appender-ref ref="MODULE"/>
</Logger>
<Logger name="MOD2" level="error">
    <Properties>
        <Property name="ModuleName">MOD2</Property>
    </Properties>
    <appender-ref ref="MODULE"/>
</Logger>

但这不起作用。如何将变量从 Logger 传递到 Appender?最后我想要2个文件

/log/module-MOD1.log <- Debug messages from MOD1
/log/module-MOD2.log <- Error messages from MOD2

谢谢你的帮助

标签: javalog4jlog4j2

解决方案


只需添加另一个并Appender连接每一对。LoggerAppender

例如 :

...
<RollingFile name="MODULE1" fileName="./log/module1-${ModuleName}.log" append="true" filePattern="./log/module1-${ModuleName}-%d{yyyy-MM-dd}_%i.log" >
    <PatternLayout pattern="%d{yyyy/MM/dd-HH:mm:ss} %-5p %C:%M:%L ~ %m%n"/>
    <Policies>
        <OnStartupTriggeringPolicy />
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="100MB"/>
    </Policies>
    <DefaultRolloverStrategy max="10"/>
</RollingFile>

<RollingFile name="MODULE2" fileName="./log/module2-${ModuleName}.log" append="true" filePattern="./log/module2-${ModuleName}-%d{yyyy-MM-dd}_%i.log" >
    <PatternLayout pattern="%d{yyyy/MM/dd-HH:mm:ss} %-5p %C:%M:%L ~ %m%n"/>
    <Policies>
        <OnStartupTriggeringPolicy />
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <SizeBasedTriggeringPolicy size="100MB"/>
    </Policies>
    <DefaultRolloverStrategy max="10"/>
</RollingFile>
...

...
<Logger name="com.foo.bar.ClassName1" level="debug">
    <Properties>
        <Property name="ModuleName">MOD1</Property>
    </Properties>
    <appender-ref ref="MODULE1"/>
</Logger>
<Logger name="com.foo.bar.ClassName2" level="error">
    <Properties>
        <Property name="ModuleName">MOD2</Property>
    </Properties>
    <appender-ref ref="MODULE2"/>
</Logger>
...

有同样的问题,所以我也在那里回答。所以,请访问这里


推荐阅读