`
冲杯茶喝
  • 浏览: 30687 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Logback+slf4j应用总结(下载地址已更新)

阅读更多

如果是刚刚接触logback,建议先下载本文最后的《Logback手册.pdf》官方手册阅读。

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比较好。
转换工具地址:http://logback.qos.ch/translator/ ,

新项目:

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

2 重加载配置文件

配置如下:

<configuration scan="true" scanPeriod="30 seconds" >

  ...

</configuration>

如果不指定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中加入

<turboFilter class="com.ztgame.test.logback.SampleFilter">

        <key>id=11,</key>

        <OnMatch>ACCEPT</OnMatch>

        <OnMismatch>NEUTRAL</OnMismatch>

    </turboFilter>

 

    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

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">

    <discriminator>

        <Key>userid</Key>

        <DefaultValue>unknown</DefaultValue>

    </discriminator>

    <sift>

        <appender

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

        <File>log/${userid}.log</File>

        <Append>false</Append>

        <layout class="ch.qos.logback.classic.PatternLayout">

            <Pattern>%d [%thread] %level %mdc %logger{35} - %msg%n</Pattern>

                </layout>

            </appender>

        </sift>

    </appender>

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项目) ,下载地址:logback_demos.zip 
2. Logback官方中文手册,下载地址:Logback手册.pdf

2
2
分享到:
评论
3 楼 冲杯茶喝 2012-11-08  
yiyun_8 写道
没有办法下载哦。

已修改
2 楼 半糖主义 2012-11-08  
demo无法下载
1 楼 yiyun_8 2012-11-08  
没有办法下载哦。

相关推荐

    logback+slf4j使用

    **SLF4J(Simple Logging Facade for Java)** 是一个为各种日志框架提供简单统一接口的Java库,使得最终用户能够在部署时插入所需的日志实现,如Log4j、Logback等。**Logback** 则是SLF4J的推荐后端实现,由Log4j的...

    logback + slf4j web项目源码

    "Logback + SLF4J Web项目源码" 提示我们这是一个基于Logback和SLF4J的日志管理系统,用于web应用程序。Logback是Java平台上的一个日志框架,它是一个替代log4j的更高效、更灵活的工具。SLF4J(Simple Logging ...

    Logback+Slf4j,基于SpringBoot实现日志脱敏.zip

    《基于SpringBoot的日志脱敏:Logback与Slf4j的实战应用》 在现代的软件开发中,日志系统是不可或缺的一部分,它为开发者提供了系统运行时的详细信息,帮助排查问题,优化性能。SpringBoot框架以其简洁的配置和强大...

    springMvc+mybaties+slf4j

    【标题】"springMvc+mybaties+slf4j" 涉及的技术栈是企业级应用开发中常见的组合,主要包括Spring MVC、MyBatis和SLF4J。这三者分别是Spring框架的Web模块、轻量级持久层框架和日志门面。 【Spring MVC】是Spring...

    日志 log4j-slf4j+logback1.3.0

    本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...

    logback+self4j 进行日志记录

    1. **ch.qos.logback.classic** - 用于应用程序的日志API,与SLF4J接口兼容。 2. **ch.qos.logback.core** - 日志记录的基础设施,支持各种Appenders(输出目标)和Layouts(格式化)。 3. **ch.qos.logback.access*...

    ssm +shiro+slf4j+logback 学习记录

    SSM(Spring、SpringMVC、MyBatis)与Apache Shiro、SLF4J以及Logback是Java Web开发中的重要框架和工具,它们在构建安全、高效且可维护的Web应用方面起着关键作用。这里我们将深入探讨这些技术的核心概念、功能以及...

    logback 1.2.6 和 slf4j 1.7.32

    Logback是日志框架,而SLF4J(Simple Logging Facade for Java)则是一个日志抽象层,它们共同为Java应用程序提供灵活且高效的日志记录能力。 **SLF4J介绍** SLF4J(Simple Logging Facade for Java)是一个接口层...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    总结,SLF4J和Log4j的组合使用让日志管理更加灵活,开发者可以通过SLF4J的简洁API进行日志记录,同时利用Log4j的强大功能,如自定义输出格式和多种输出目的地。通过适当的配置和测试,我们可以确保日志系统按照预期...

    Junit+log4j+slf4j

    SLF4J 1.6.2版本为应用开发者提供了灵活性,让他们能够在运行时选择日志实现,例如log4j、java.util.logging或者Logback。SLF4J的API设计简洁,允许在不修改代码的情况下更换底层的日志实现,降低了维护成本。 将...

    slf4j+logback+springmvc+maven小例子

    在这个“slf4j+logback+springmvc+maven小例子”中,我们看到的是一个结合了这些技术的简单应用。Spring MVC是一个基于Spring框架的轻量级Web MVC框架,它简化了构建交互式、RESTful的Web应用的流程。Maven则是一个...

    logbackーslf4j-配置文件实例 难得

    本文将深入探讨Logback-SLF4J的配置文件,以帮助开发者更好地理解和应用。 ### 1. SLF4J简介 SLF4J是一个抽象层,它为各种日志框架提供了统一的API,如Log4j、Java Util Logging等。通过SLF4J,开发者可以在不修改...

    调试日志之slf4j+logback

    本文将深入探讨“调试日志之slf4j+logback”的主题,这两个组件是Java开发中的常见日志解决方案。 SLF4J(Simple Logging Facade for Java)是一个日志门面,它为各种日志框架提供了统一的接口,如Log4j、Logback等...

    hibernate+slf4j+log4j+junit包

    在Java开发领域,Hibernate、SLF4J、Log4j以及JUnit是四个非常重要的库,它们各自服务于不同的目的,但又常被一起使用以构建高效、可维护的项目。让我们来详细了解一下这些技术和它们在软件开发中的作用。 1. ...

    slf4j-api-1.6.1.jar + slf4j-nop-1.6.1.jar

    在实际应用中,除了将SLF4J API和NOP实现加入类路径外,还需要根据所选日志框架的特性配置相应的配置文件,如Logback的`logback.xml`或Log4j的`log4j.properties`。这些配置文件定义了日志的级别、输出目的地、格式...

    slf4j-api.jar + slf4j-nop-1.5.0.jar

    SLF4J(Simple Logging Facade for Java)是Java中一个简单日志门面的接口,它为各种日志框架提供了统一的API,比如Log4j、Java Util Logging、Logback等。`slf4j-api.jar`是SLF4J的核心API,包含了各种日志记录方法...

    slf4j-api-1.6.1.jar+slf4j-log4j12-1.6.1.jar+log4j-1.2.17.jar

    SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面,它提供了一个统一的日志接口,使得开发者能够选择合适的日志框架,如Log4j、Logback等,而无需修改代码。SLF4J API的核心库是`slf4j-api.jar`,它...

    slf4j-log4j12-1.6.1.jar+slf4j-api-1.6.1.jar

    SLF4J(Simple Logging Facade for Java)和Log4j是Java开发中常用的日志处理框架,它们在构建SSH(Struts、Spring、Hibernate)和MVC(Model-View-Controller)架构的Web应用程序时扮演着至关重要的角色。...

    spring + activiti + slf4j + mail

    3. **SLF4J(Simple Logging Facade for Java)**:SLF4J是一个日志抽象层,为各种日志框架(如log4j、logback)提供一个统一的接口。它允许开发者在部署时自由选择合适的日志实现,使得日志记录更加灵活且不绑定到...

    slf4j-log4j12-1.7.7.jar下载

    在使用SLF4J和Log4j12时,你需要注意的一点是,由于Log4j1.2相比Log4j2在某些方面可能较旧,例如性能和功能更新,因此在新项目中,你可能会考虑使用更新的SLF4J绑定器,如slf4j-log4j2,以便利用Log4j2的改进特性。...

Global site tag (gtag.js) - Google Analytics