【问题标题】:Filter by class name in log4j2在 log4j2 中按类名过滤
【发布时间】:2013-05-30 19:12:29
【问题描述】:

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

<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>

【问题讨论】:

    标签: java logging filter configuration log4j2


    【解决方案1】:

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

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

    记录器自动分配名称fully.qualified.class.name.of.MyClass。现在,在您的配置中,您可以使用这个完全限定名(或包名的第一部分)来执行过滤路由


    过滤

    下面的例子展示了如何根据进行日志记录的类的包过滤日志事件:包com.other.company中的类的所有DEBUGTRACE级别的日志事件将被忽略,对于包中的类com.another.project 仅包含 ERRORFATAL 日志记录。

    <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.company中的类的所有日志记录将不会写入my.log,仅写入other.log .

    <Configuration status="warn">
      <Appenders>
        <File name="MyFile" fileName="logs/my.log">
          <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
        </File>
        <File name="OtherFile" fileName="logs/other.log">
          <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
        </File>
      </Appenders>
      <Loggers>
        <!-- all logging from this package and subpackages goes to OtherFile -->
        <!-- Note: set additivity=false or logging will also go to the root logger -->
        <Logger name="com.other.company" additivity="false">
          <AppenderRef ref="OtherFile"/>
        </Logger>
        <Root level="trace">
          <AppenderRef ref="MyFile"/>
        </Root>
      </Loggers>
    </Configuration>
    

    【讨论】:

    猜你喜欢
    • 2022-07-13
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2023-04-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多