有没有一种方法可以使用Slf4j将某些事件记录到单独的日志文件中?

时间:2016-01-21 02:42:54

标签: java logging slf4j

我正在使用Slf4j登录我的Java服务,但是对于某些类型的事件,我想为它创建一个单独的日志文件。

是否可以使用Slf4j来实现它?

1 个答案:

答案 0 :(得分:1)

Slf4j只是一个抽象,可以帮助您与各种日志框架进行交互 - 您还需要选择一个日志框架。 下面是logback的示例 - 但如果您更喜欢其他框架(JUL,log4j2),那么同样的概念也适用于这些框架。

您需要做的是在特定记录器下记录您的特殊事件:

Logger logger = LoggerFactory.getLogger("my.special.events");
logger.info("Oh my! Something has happened!");

然后设置logback(或您选择的框架)将通过此记录器发送的事件发送到另一个目的地(另一个appender):

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <appender name="SPECIAL" class="ch.qos.logback.core.FileAppender">
    <file>specialEvents.log</file>  
    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="my.special.events">
    <appender-ref ref="SPECIAL" />
  </logger>  

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

这会将您的特殊事件发送到STDOUT和单独的文件。如果您只需要文件中的这些事件,请将additivity设置为false,如docs中所述。