我想在我的应用程序中使用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
开始,我错了吗?
答案 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");
基本上,这与自己格式化邮件非常相似,但在某些情况下它可能会带来性能优势。