日志和业务联系在一块的时侯怎么办? 比如,记下登录用户ID,串起前后日志;不同的业务模块记录在不同的日志文件里。SLF4J 解决这两件事很容易。
记录上下文相关信息可以用MDC,MDC 的用法非常简单。首先在logback.xml 里面用%X{your_key} 标记需要记录上下文信息。然后在代码中用MDC 记录your_key 的值。举例:
T.java: MDC.put("your_key", "your_value"); logger.info("Hello World"); logback.xml <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{your_key} %msg%n</pattern> </layout> output: 2012-12-17 23:20:45 your_value Hello World
区分不同的模块的日志,可以在getLogger() 的时侯根据logger 的名字拿到不同的logger-> appender 。不过这条路略微有点土。用SLF4J 的marker 可以相对优雅的解决这个问题。可惜,目前只有logback 才支持。
如果把所有的日志混在一起记录,只是用关键字做区分,很简单,之需要在代码中声明marker,然后在logback 中配置就可以了。举例:
T.java: MDC.put("your_key", "your_value"); logger.info("Hello World"); logback.xml <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{your_key} %msg%n</pattern> </layout> output: 2012-12-17 23:20:45 your_value [...]
Recent Comments
- Ken on SLF4J MDC and Marker
- Ken on SLF4J MDC and Marker
Archives
- February 2012 (1)
- December 2011 (1)
- August 2011 (1)
- April 2011 (1)
- March 2011 (1)
- January 2011 (14)


