Gok*_*enG 5 logging logback slf4j
我想org.slf4j.Marker在我的应用程序中使用。我已经有一个 logback.xml 文件,无需标记即可正常工作。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");
}
}
Run Code Online (Sandbox Code Playgroud)
文件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>
Run Code Online (Sandbox Code Playgroud)
但我绝对不确定logback.xml文件中标记的用法。
此配置的输出是:
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
Run Code Online (Sandbox Code Playgroud)
我的配置有什么问题?提前致谢。
编辑:将评估器添加到 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>
Run Code Online (Sandbox Code Playgroud)
我懂了:
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
Run Code Online (Sandbox Code Playgroud)
编辑2:
我懂了
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
Run Code Online (Sandbox Code Playgroud)
但我认为我应该从 开始PROCESS_INT,我错了吗?
由于您使用的是 Turbo Filter 而不是常规过滤器,因此它与整体上下文相关,而不是与特定的附加程序相关。因此,您需要在外部定义它:例如在标签之后。
如果您想在特定的附加程序上使用它,您可以使用常规过滤器。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>PROCESS_INT</marker>
</evaluator>
... ... etc. ... ...
Run Code Online (Sandbox Code Playgroud)
检查该标记并允许或禁止该附加程序。
对于格式,当您在 Java 中记录消息时,您需要使用“{}”,而不是“%s”样式格式。
LOGGER.debug(PROCESS_INTEGRATION_MARKER, "Method started:{}", "sendRequest");
Run Code Online (Sandbox Code Playgroud)
本质上,这与您自己格式化消息非常相似,但在某些情况下它可能会带来性能优势。
| 归档时间: |
|
| 查看次数: |
9169 次 |
| 最近记录: |