java - Log4j:如何在单独的文件中按类过滤

标签 java configuration log4j

我在更改现有配置时得到奇怪的结果:

配置

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" verbose="true" dest="err" name="RdmCoreLogProperties">
    <Properties>
        <Property name="baseFilename">$${env:SOME_VAR}/$${sys:processName}_$${sys:instanceNumber}_$${env:SOME_VAR2}.log</Property>
        <Property name="pattern">%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.} - %msg%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>
        <RollingFile name="RollingFile" fileName="${baseFilename}" filePattern="${baseFilename}.%02i" immediateFlush="true" append="true">
            <PatternLayout pattern="${pattern}"/>
            <Policies>
                <OnStartupTriggeringPolicy minSize="0"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="99"/>
        </RollingFile>
        <!--My new file-->
        <File name="Filtered" fileName="${baseFilename}_FILTERED.log">
            <PatternLayout pattern="${pattern}"/>
        </File>
    </Appenders>
    <Loggers>
        <!--Already existing loggers-->
        <Logger name="1AB" level="debug"/>
        <Logger name="1AB.message" level="trace"/>
        <Logger name="2AB" level="debug"/>
        <Logger name="2AB.message" level="trace"/>
        <!--Already existing loggers-->


        <!--My new Logger-->
        <Logger name="com.package.MyClass">
            <level value="INFO"/>
            <appender-ref ref="Filtered"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Filtered"/>
        </Root>
    </Loggers>
</Configuration>

“过滤”日志文件(看看感兴趣的行现在是如何重复的!)

bla bla bla not interesting text...
16:36:30.963 [XXX] INFO  com.package.MyClass - important and unique text
16:36:30.963 [XXX] INFO  com.package.MyClass - important and unique text
bla bla bla more boring and not interesting text...

原始日志文件(该文件保持不变,这实际上没问题)

bla bla bla not interesting text...
16:36:30.963 [XXX] INFO  com.package.MyClass - important and unique text
bla bla bla more boring and not interesting text...

所需的过滤日志文件

16:36:30.963 [XXX] INFO  com.package.MyClass - important and unique text

注释 1:如果我将 additivity="false"添加到新记录器,我会得到以下结果:

“过滤”日志文件(现在日志等于原始日志文件)

bla bla bla not interesting text...
16:36:30.963 [XXX] INFO  com.package.MyClass - important and unique text
bla bla bla more boring and not interesting text...

原始日志文件

bla bla bla not interesting text...
bla bla bla more boring and not interesting text...

注2:如果我将记录器名称更改为不存在的类,则原始日志文件和新日志文件是相同的。

我在这里做错了什么?谢谢!

最佳答案

您只需将 additivity="false" 添加到您的记录器即可。在这种情况下:

    <Logger name="com.package.MyClass" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="Filtered"/>
    </Logger>

应该可以解决您的问题。

关于java - Log4j:如何在单独的文件中按类过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62182834/

相关文章:

java - CDI - 应用程序范围但已配置

Java 正则表达式替换字符串中的负字节

java - Java中计算两个地理坐标之间的距离

java - 使用 StackExchange API 获取 GitHub 帐户

java - 如何使 Log4J2 在 JBoss EAP 6.4 中工作

spring - 使用 log4j 显示 jdbc 事务事件

java - 如何使用 log4j 并多次使用具有动态文件名的附加程序?

java - 使用 JPA 查找订单的总价

configuration - log4j appender 阈值和类别

emacs - 有没有办法在 emacs 中修复窗口缓冲区以解决苹果酒错误/repl