java slf4j 例子_Logback+slf4j【进阶】【实例】

Tuesday, June 05, 2012编写2012年7月17日日更新

如果是刚刚接触logback,建议先下载本文最后的《》官方手册阅读。1、如何替换现有的log4j

现有项目:

去掉slf4j-log4j.jar和log4j.jar,添加logback-core.jar、logback-classical.jar。然后删除log4j.xml并且添加logback的配置文件logback.xml。(应用中有加载log4j配置文件的需要去掉)这里是针对项目中已经使用了log4j+slf4j组合的情况。

如果现有项目只是使用了log4j,那么需要通过slf4j官方提供的工具修改项目源码(工具就是slf4j下载文件夹下的slf4j-migrator.jar)。

工具使用方法:http://www.slf4j.org/migrator.html。

如果项目使用的是log4j.properties来配置的,那么可以通过logback官方的工具转为logback.xml,但如果是log4j.xml,那么还是重新编写logback.xml比较好。

新项目:

直接添加logback-core.jar、logback-classical.jar和log4j-over-slf4j.jar三个jar包,编写logback.xml配置文件。

2、重加载配置文件

配置如下:

...

如果不指定scanPeriod,默认情况下是每分钟重新读取的配置文件。这里可以通过scanPeriod属性配置时间间隔,单位有:milliseconds, seconds, minutes or hours,如上面的三十秒(数值跟单位中间空格隔开)。这里没有指定单位的情况下默认单位是milliseconds。

PS:

1-根据官方文档,当scan设置为true,会自动添加一个过滤器,这个过滤器在logger线程中被调用。也就是说,当调用logger.debug(),这个方法执行前,会先调用过滤器的方法。假如这时logger的级别被设置成了info,那么logger.debug()任然会被调用。

2-自动加载会影响性能。因此,所以在实现上,不是每次logger调用都会去判断scanPeriod是否到期,默认情况是没16次调用会去检查一下scanPeriod是否到期。所以说这个重加载会有很小的延迟。(开发环境中可以忽略)

3、针对特定用户输入debug级别的日志。

这里通过turboFilter来实现这个工具,如:在logback.xml中加入

id=11,

ACCEPT

NEUTRAL

SimpleFilter.java文件:

public class SampleFilter extends TurboFilter {

private String key;

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

@Override

public FilterReply decide(Marker marker, Logger logger, Level level,

String format, Object[] params, Throwable t) {

if (format != null && format.contains(key)) {

return FilterReply.ACCEPT;

} else {

return FilterReply.DENY;

}

}

}

turboFilter是全局的,当logger的事件产生的时候就去做过滤。假如设置了logger的级别是info,上面的代码能让id为11的用户信息打印出来。

注意:1.写log的时候大家最好统一规范,潜规则是:

在什么【时间】,【人物】在【地点】做了【事件】【……】

【时间】:日志记录的时间

【人物】:日志记录的对象,如:userId=11

【地点】:输入日志的方法

【事件】:具体做了什么,如:买了xxx

【……】:其他相关信息,如:rpc耗时等等

2.单个信息后面加上固定分割符:如userId=11,(逗号)

4、区分开发和生产环境

logback默认加载配置文件的优先级是:logback-test.xml > logback.xml。在开发和测试阶段提供logback-test.xml来达到区分生产环境与开发环境的目的。

5、为每个用户生产一个日志文件

用SiftingAppender来实现

logback.xml

userid

unknown

name="FILE-${userid}" class="ch.qos.logback.core.FileAppender">

log/${userid}.log

false

%d [%thread] %level %mdc %logger{35} - %msg%n

Java文件:

logger.debug("Application started");

MDC.put("userid", "Alice");

logger.debug("Alice says hello");

MDC.put("userid", null);

logger.debug("Alice says hello2");

这里需要在每次记录log之前设置用户信息。(有点麻烦,可以简单封装一下,适合新项目)

6、log文件的压缩和自动删除

logback提供一套自动压缩和删除的机制,具体配置查看logback_demos中的示例。

建议是这样一种日志布局:

|---------log根目录

|-----------------动态log文件(当前被使用)

|-----------------backup目录(用于存放日志备份)

….

|------------------------日期目录(存放压缩好的备份日志,,过期的会被自动删除)附件:1. 附带一些demos(eclipse项目)2. Logback官方中文手册,下载地址:Logback手册.pdf

posted on 2012-06-05 13:56 冲杯茶喝 阅读(8863) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值