11

我正在使用 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>
4

1 回答 1

11

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

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

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


过滤

下面的示例显示了如何根据执行日志记录的类的包过滤日志事件:包中的类的所有DEBUGTRACE级别日志事件com.other.company将被忽略,并且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>
于 2017-01-21T12:46:25.563 回答