使用 log4j2 时,有没有办法对不同的包使用不同的模式?

Is there a way to use different pattern for different packages when using log4j2?

我正在使用 log4j(通过 slf4j),我想要一些包的日志来输出文件名和行号,但对于其他包,我只需要级别和消息。有没有办法做到这一点?是否可以使用 log4j2.properties 文件为不同的 classes/packages 指定不同的 layout.ConversionPattern?

您可以使用多个相同类型的 appender:

这是一个例子:

<Appenders>
    <Console name="ConsoleA" target="SYSTEM_OUT">
         <PatternLayout pattern=="%-4r [%t] %-5p %c %x - %m%n" />
    </Console>
    <Console name="ConsoleB" target="SYSTEM_OUT">
         <PatternLayout pattern=="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
   </Console>
</Appenders>

<Loggers>
   <Logger name="com.foo.BarA" level="trace">
      <AppenderRef ref="ConsoleA"/>
   </Logger>
   <Logger name="com.foo.BarB" level="trace">
     <AppenderRef ref="ConsoleB"/>
   </Logger>
</Loggers>

Log4J configuration manual

阅读更多内容