将单独的日志级别记录到log4j2属性文件中的单独文件中

q43xntqr  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(211)

是否有任何方法可以为不同的日志级别创建单独的日志文件?
我只想将error日志记录到一个文件,将info日志记录到另一个文件。
我在log4j2.properties中没有找到任何解决方案。这是我得到的log4j2.xml,它工作得很好。有人能帮我在属性文件中写同样的东西吗?
此XML文件使用Log4j2常见问题解答中的方法,并在AppenderRef上设置level

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>
    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
        </Console>

        <RollingFile name="trace-log"
                     fileName="${log-path}/mycuteblog-trace.log"
                     filePattern="${log-path}/mycuteblog-trace-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <RollingFile name="error-log"
                     fileName="${log-path}/mycuteblog-error.log"
                     filePattern="${log-path}/mycuteblog-error-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="com.mycuteblog.log4j2" level="debug" additivity="false">
            <appender-ref ref="trace-log"    level="debug"/>
            <appender-ref ref="error-log"    level="error"/>
            <appender-ref ref="console-log"  level="debug"/>
        </Logger>
        <Root                                level="info" additivity="false">
            <AppenderRef ref="console-log"/>
        </Root>
    </Loggers>
</Configuration>

我不想为此做任何代码更改。我正在寻找具体的log4j2.properties
先谢谢你。

fkaflof6

fkaflof61#

尝试级别范围筛选器

请尝试LevelRangeFilter:如果您使用log4j2进行日志记录,请在Appender配置中包含此行

<LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>

上面的行将错误日志与其他日志分隔开
如果将minLevel和maxLevel作为INFO提及,则只考虑INFO日志,而不考虑以上级别的日志。

<LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>

下面的log4j.xml文件对我有用:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>
    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/>
        </Console>

        <RollingFile name="trace-log"
                     fileName="${log-path}/mycuteblog-trace.log"
                     filePattern="${log-path}/mycuteblog-trace-%d{yyyy-MM-dd}.log">
            <LevelRangeFilter minLevel="TRACE" maxLevel="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <RollingFile name="info-log"
                     fileName="${log-path}/mycuteblog-info.log"
                     filePattern="${log-path}/mycuteblog-info-%d{yyyy-MM-dd}.log">
            <LevelRangeFilter minLevel="INFO" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <RollingFile name="error-log"
                     fileName="${log-path}/mycuteblog-error.log"
                     filePattern="${log-path}/mycuteblog-error-%d{yyyy-MM-dd}.log">
            <LevelRangeFilter minLevel="ERROR" maxLevel="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info" additivity="false">
            <AppenderRef ref="console-log"/>
            <AppenderRef ref="trace-log"/>
            <AppenderRef ref="error-log"/>
            <AppenderRef ref="info-log"/>
        </Root>
    </Loggers>
</Configuration>

有关更多参考信息,请访问以下链接:https://howtodoinjava.com/log4j2/multiple-appenders/

r1zhe5dt

r1zhe5dt2#

尝试阈值筛选器

ThresholdFilter用于根据日志级别过滤消息。要获得不同的日志文件,每个附加器都应该有合适的阈值过滤器。它应该是这样的(使用xml):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="log-path">logs</Property>
        <Property name="log-pattern">[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}- %msg%n"/</Property>
    </Properties>
    <Appenders>
        <Console name="console-log" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
        </Console>

        <RollingFile name="trace-log"
                     fileName="${log-path}/mycuteblog-trace.log"
                     filePattern="${log-path}/mycuteblog-trace-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <RollingFile name="error-log"
                     fileName="${log-path}/mycuteblog-error.log"
                     filePattern="${log-path}/mycuteblog-error-%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
...

请注意,日志模式被定义为一个属性,因为所有三个附加器都使用相同的模式。
我不能帮助配置作为一个属性文件,我从来没有使用过它。
您可以在ThresholdFilter documentation和上找到有关过滤器的更多信息。

相关问题