如何为slf4j Marker配置logback.xml文件

时间:2014-03-21 15:35:12

标签: logging slf4j logback

我想在我的应用程序中使用org.slf4j.Marker。我已经有一个logback.xml文件,无需Markers即可正常工作。 Java代码是这样的:

    public class SimpleActivitiIntegrationService implements ActivitiIntegrationService {
        private static final Marker PROCESS_INTEGRATION_MARKER = MarkerFactory.getMarker("PROCESS_INT");
        private static final Logger LOGGER = LoggerFactory.getLogger(SimpleActivitiIntegrationService.class);
        ...
        public void sendRequest(String s) throws RuntimeException {
            LOGGER.debug(PROCESS_INTEGRATION_MARKER, "Method started:%s", "sendRequest");
    }
}

并且logback.xml文件是这样的:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/${log.file.name}.${log.file.extension}</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>
            ${log.path}/${archieve.dir.name}/${log.file.name}.%d{yyyy-MM-dd}.%i.${log.file.extension}
        </fileNamePattern>

        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 10MB -->
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>

        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
        <pattern>
            %d [%X{contexPath}] [%thread] %-5level %logger{35} %method - %msg%n
        </pattern>
    </encoder>
    <turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
        <Name>PROCESS_INT_FILTER</Name>
        <Marker>PROCESS_INT</Marker>
        <OnMatch>ACCEPT</OnMatch>
        <OnMismatch>NEUTRAL</OnMismatch>
    </turboFilter>
</appender>

但我绝对不确定logback.xml文件中Marker的使用情况。

此配置的输出为:

2014-03-21 17:25:17,041 [] [http-bio-8080-exec-1] DEBUG t.c.i.s.a.s.e.SimpleActivitiIntegrationService sendRequest - Method started:%s

我的配置有什么问题? 提前谢谢。

编辑: 将评估者添加到Appender:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
        <marker>PROCESS_INT</marker>
    </evaluator>
    <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder
        by default -->
    <encoder>
        <pattern>
            %d [%X{contextPath}] [%thread] %-5level %logger{35} %method - %msg%n
        </pattern>
    </encoder>
</appender>

我明白了:

2014-03-25 02:06:58,892 [] [http-bio-8080-exec-1] DEBUG t.c.i.s.a.s.e.SimpleActivitiIntegrationService sendRequest - Response acquired payloadType:%s, respCode:%s

EDIT2:

我得到了这个

2014-03-25 02:06:58,892 [] [http-bio-8080-exec-1] DEBUG t.c.i.s.a.s.e.SimpleActivitiIntegrationService sendRequest - Method started:sendRequest

但我想我应该从PROCESS_INT开始,我错了吗?

1 个答案:

答案 0 :(得分:2)

由于您使用的是Turbo Filter而不是常规过滤器,因此它与整体上下文绑定,而不是与特定的appender绑定。因此,您需要在外面定义它:例如在标签之后。

如果要在特定的appender上使用它,可以使用常规过滤器。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
      <marker>PROCESS_INT</marker>
    </evaluator>
... ... etc.    ...  ...

检查该标记并允许或禁止该appender。

对于格式化,当您在Java中记录消息时,而不是&#34;%s&#34;样式格式,你需要使用&#34; {}&#34;。

LOGGER.debug(PROCESS_INTEGRATION_MARKER, "Method started:{}", "sendRequest");

基本上,这与自己格式化邮件非常相似,但在某些情况下它可能会带来性能优势。