什么是 logback

Logback 为取代 log4j 而生。

Logback 由 log4j 的创立者 Ceki Gülcü 设计。以十多年设计工业级记录系统的经验为基础,所创建的 logback 比现有任何记录系统更快、占用资源更少,有时差距非常大。

Logback 提供独特而实用的特性,比如 Marker、参数化记录语句、条件化堆栈跟踪和强大的事件过滤功能。以上列出的仅仅是 logbook 实用特性的一小部分。

对于自身的错误报告,logback 依赖状态(Status)对象,状态对象极大地简化了故障查找。你也许想在上下文中使用状态对象而不是记录。

Logback-core 附带了 Joran,Joran 是个强大的、通用的配置系统,你可以在自己的项目里使用 Joran 以获得巨大的作用。

第一步

必要条件

Logback-classic 依赖 slf4j-api.jar 和 logback-core.jar。

现在让我们开始体验 logback。

示例 1.1:记录基本模版

(logback-examples/src/main/java/chapters/introduction/HelloWorld1.java)

  1. package chapters.introduction;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class HelloWorld1 {
  5. public static void main(String[] args) {
  6. Logger logger = LoggerFactory
  7. .getLogger("chapters.introduction.HelloWorld1");
  8. logger.debug("Hello world.");
  9. }
  10. }

HelloWorld1 类导入了 SLF4J API 定义的 Logger 类和 LoggerFactory 类,更明确地说是定义在 org.slf4j 包里的两个类。

main()方法的第一行里,调用 LoggerFactory 类的静态方法 getLogger 取得一个 Logger实例,将该实例赋值给变量logger。这个 logger被命名为“chapters.introduction.HelloWorld1”。

main 方法继续调用这个 logger 的 debug 方法并传递参数“Hello world”。我们称之为 main方法包含了一条消息是“Hello world”、级别是 DEBUG 的记录语句。

注意上面的例子并没有引用任何 logback 的类。多数情况下,只要涉及到记录,你只需要引用 SLF4J 的类。因此在绝大多数情况下,你的类只导入 SLF4J 的 API,基本可以忽略logback 的存在。

运行示例程序:

java chapters.introduction.HelloWorld1

运行后会在控制台输出下面的一行文字。得益于 logback 提供了默认配置策略,当没有发现默认配置文件时,logback 会为根(root) logger 添加一个 ConsoleAppender。

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.

Logback 可以通过内置的状态系统来报告其内部状态。通过 StatusManager 组件可以访问 logback 生命期内发生的重要事件。目前,我们调用 StatusPrinter 类的 print()方法来打印logback 的内部状态。

示例 1.2:打印 Logger 状态

(logback-examples/src/main/java/chapters/introduction/HelloWorld2.java)

  1. package chapters.introduction;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import ch.qos.logback.classic.LoggerContext;
  5. import ch.qos.logback.core.util.StatusPrinter;
  6. public class HelloWorld2 {
  7. public static void main(String[] args) {
  8. Logger logger = LoggerFactory
  9. .getLogger("chapters.introduction.HelloWorld2");
  10. logger.debug("Hello world.");
  11. // print internal state
  12. LoggerContext lc = (LoggerContext)
  13. LoggerFactory.getILoggerFactory();
  14. StatusPrinter.print(lc);
  15. }
  16. }

运行后输出如下:

  1. 12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
  2. 12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
  3. resource [logback-test.xml]
  4. 12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
  5. resource [logback.xml]
  6. 12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default
  7. configuration.

Logback 说它没有找到配置文件 logback-test.xml 和 logback.xml(稍后解释),于是用默认策略进行配置,即用一个基本的 ConsoleAppender。Appender 类可被视为输出目的地的。

Appender 包含许多不同类型的目的地,包括控制台、文件、Syslog、TCP 套接字、JMS 和其他。用户可以很容易地自定义 Appender。

当发生错误时,logback 将自动在控制台上打印其内部状态。

之前的两个示例相当简单,大型程序里真实记录志情况也不会有太大区别。记录系统的基本模式不会改变,可能改变的是配置过程。也许你想按照自己的需要来定制或配置 logback,之后的章节会讨论配置 logback。

在上面的例子里,我们调用 StatusPrinter.pring()方法来打印 logback 的内部状态。在诊断与 logback 相关的问题时,logback 的内部状态信息会非常有用。

在应程序里启用记录的三个必需步骤如下:

  1. 配置 logback 环境。方法有繁有简,稍后讨论。
  2. 在每个需要执行记录的类里,调用 org.slf4j.LoggerFactory 类的 getLogger()方法获取一个 Logger 实例,以当前类名或类本身作为参数。
  3. 调用取得的 logger 实例的打印方法,即 debug()、info()、warn()和 error(),把记录输出到配置里的各 appender。

构建 logback

Logback 使用 Maven2 进行构建。

安装 Maven2 后,解压 logback 发行包,在解压后的目录下执行 mvn package 命令,就可以构建整个 logback 项目,包括各个模块。Maven 会自动下载所需外部类库。

Logback 发行包包含完整的源代码,你可以修改源代码,创建自己的版本。你还可以发布修改过的版本,前提是遵守 LGPL 或 EPL。

Logback 在以下 JDK 进行过构建和测试。

JDK Operating System
Sun JDK 1.5.0.06 Windows XP
Sun JDK 1.5.0.08 Linux 64bit AMD
WebLogic JRockit 1.5.0.14 Linux 64bit AMD
IBM JDK 1.6.0.1 Linux 64bit AMD
Sun JDK 1.6.0.16 (64 bit) Windows 7 (64 bit)

Logback中文文档(一):介绍的更多相关文章

  1. Logback中文文档(二):体系结构

    logback Logback 的基本结构充分通用,可应用于各种不同环境.目前,logback 分为三个模块:Core.Classic 和 Access. Core模块是其他两个模块的基础.Class ...

  2. Logback中文文档(三):配置

    在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子.在第二部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran. Logback里的配置 ...

  3. Logback中文文档(四):Appender

    什么是 Appender Appender是负责写记录事件的组件.Appender 必须实现接口"ch.qos.logback.core.Appender".该接口的重要方法总结如 ...

  4. ENS中文文档系列之一 [ ENS介绍 ]

    前言 ENS中文文档是由我照ENS英文官方文档翻译而来,其中的一些内容和细节得到了ENS官方团队的指导.文档中包含 “LBB译注” 的地方是译者为了便于读者理解而进行的注释. 未来一段时间,我会在该博 ...

  5. Reactor3 中文文档(用户手册)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. Phoenix综述(史上最全Phoenix中文文档)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...

  7. Knockout中文开发指南(完整版API中文文档) 目录索引

    a, .tree li > span { padding: 4pt; border-radius: 4px; } .tree li a { color:#46cfb0; text-decorat ...

  8. Spring中文文档

    前一段时间翻译了Jetty的一部分文档,感觉对阅读英文没有大的提高(*^-^*),毕竟Jetty的受众面还是比较小的,而且翻译过程中发现Jetty的文档写的不是很好,所以呢翻译的兴趣慢慢就不大了,只能 ...

  9. 【Chromium中文文档】线程

    线程 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Threading. ...

随机推荐

  1. 机器学习集成算法--- 朴素贝叶斯,k-近邻算法,决策树,支持向量机(SVM),Logistic回归

    朴素贝叶斯: 是使用概率论来分类的算法.其中朴素:各特征条件独立:贝叶斯:根据贝叶斯定理.这里,只要分别估计出,特征 Χi 在每一类的条件概率就可以了.类别 y 的先验概率可以通过训练集算出 k-近邻 ...

  2. spark streaming从指定offset处消费Kafka数据

    spark streaming从指定offset处消费Kafka数据 -- : 770人阅读 评论() 收藏 举报 分类: spark() 原文地址:http://blog.csdn.net/high ...

  3. mac上校验文件的 md5 sha-1

    文件校验 mac md5 sha-1html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMir ...

  4. # Writing your-first Django-app-part 5 -test

    确认bug 写test测试暴露bug 修复bug 更多测试例子 测试一个view The Django test client测试客户端. 提升DemoAppPoll/views.py 测试我们的vi ...

  5. Linux中的守护进程——supervise

    絮叨 supervise是daemontools的一个工具,可以用来监控管理Unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序. 本文介绍一下supervise ...

  6. TCP/IP协议栈

    TCP/IP协议栈包含TCP层.IP层.链路层.NIC驱动等. 参考: 1. 全面了解linux TCP/IP协议栈 2. 跟我学TCP/IP系列

  7. Mask R-CNN详解和安装

    Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现. 除此之外,Detectron还包含了IC ...

  8. 【进阶修炼】——改善C#程序质量(10)

    158,不要写冗余注释. 注释应该写代码没有表达的东西. 代码能够自我描述就不要加注释. 159,废弃的注释应该尽早删除. 废弃的注释由于年代太久远,已经和现在的代码逻辑不匹配了,这样的注释只会误导人 ...

  9. WmS具体解释(二)之怎样理解Window和窗体的关系?基于Android7.0源代码

    上篇博客(WmS具体解释(一)之token究竟是什么?基于Android7.0源代码)中我们简要介绍了token的作用,这里涉及到的概念非常多,当中出现频率最高的要数Window和窗体这一对搭档了,那 ...

  10. greendao数据库初次使用的配置及多表关联的初始化

    1.在工程外层(Project)的build.gradle中添加依赖 buildscript { repositories { jcenter() } dependencies { classpath ...