在log4j2中按类名过滤

时间:2013-06-04 11:48:12

标签: java logging filter configuration log4j2

我正在使用log4j2,我不知道如何按类名过滤。我尝试过使用RegexFilter,但它只过滤了短信。在旧的log4j就足够了标签'filter'

<filter class="aaaa.bbbb.cccc.ClassName">

有人知道现在该怎么做?

提前谢谢!

更新

好的,我做到了!我需要定义一个记录器并在属性'name'中设置类名:

<loggers>
    <logger name="aaaa.bbbb.cccc.ClassName" additivity="false" level="info">
        <appender-ref ref="RollingFile" />
    </logger>
    <root level="error">
        <appender-ref ref="RollingFile" />
    </root>
</loggers>

1 个答案:

答案 0 :(得分:3)

如果您遵循记录器的命名约定,这将在Log4j中自动运行。在您的代码中,使用类名声明记录器:

Logger logger = LogManager.getLogger(MyClass.class);

自动为记录器指定名称fully.qualified.class.name.of.MyClass。现在,在您的配置中,您可以使用此完全限定名称(或程序包名称或程序包的第一部分)进行过滤和路由:

<强>过滤

下面的示例演示如何根据执行日志记录的类的包过滤日志事件:将忽略包com.other.company中的类的所有DEBUG和TRACE级别日志事件,以及包{{}中的类1}}仅包含ERROR和FATAL日志记录。

com.another.project

<强>路由

以下示例显示如何根据执行日志记录的类的包将日志事件路由到单独的日志文件:包<Configuration status="warn"> <Appenders> <File name="MyFile" fileName="logs/my.log"> <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" /> </File> </Appenders> <Loggers> <!-- drops all DEBUG and TRACE logging done by any class in this package --> <Logger name="com.other.company" level="INFO" /> <!-- log only ERROR and FATAL logging by classes in this package --> <Logger name="com.another.project" level="ERROR" /> <!-- by default, all log events are written to MyFile --> <Root level="trace"> <AppenderRef ref="MyFile"/> </Root> </Loggers> </Configuration> 中的类的所有日志记录都不会仅写入com.other.companymy.log

other.log