什么是 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)

package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld1 {
public static void main(String[] args) {
Logger logger = LoggerFactory
.getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world.");
}
}

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)

package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
Logger logger = LoggerFactory
.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
LoggerContext lc = (LoggerContext)
LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
}
}

运行后输出如下:

	12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find
resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default
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. 使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)

    1.首先是rabbitmq的配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...

  2. 把Java中\u格式的unicode编码转成中文

    使用org.apache.commons.lang.StringEscapeUtils#unescapeJava(String)方法. 当然用org.apache.commons.lang.Strin ...

  3. WIN锁屏+鼠标移动事件

    winexec('rundll32.exe user32.dll, LockWorkStation', sw_hide); 1.shutdown.bat(关机)  rundll32.Exe shell ...

  4. java基础篇---XML解析(一)

    XML是可扩展标记语言 在XML文件中由于更多的是描述信息的内容,所以在得到一个xml文档后应该利用程序安装其中元素的定义名称去除对应的内容,这样的操作称为XML解析. 在XML解析中W3C定义SAX ...

  5. 定位被选中的select

    <script> var countryId = "{$user['country']}"; $("select[@name='country'] optio ...

  6. Error: Java heap space

    在chd中 的hive中执行 (select count (*))  或者mr程序都报Error: Java heap space 4.io.sort.mb 的作用  排序所使用的内存数量.  默认值 ...

  7. swift-Xcode7.x(7.1,7.2,7.3)新建playground运行不能运行

    swift-Xcode7.xhtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror- ...

  8. <Effective Django>读书笔记

    In Django parlance, a project is the final product, and it assembles one or more applications togeth ...

  9. [4G]4G模块的热重启

    最近在调试4G模块,发现在开机启动时执行的AT指令会概率性的出现返回杂乱字符串的问题.想尽了各种办法还是行不通,在系统中使用minicom敲AT指令就不会有问题,开始怀疑是串口初始化的问题,修改了很多 ...

  10. Nginx+php (十六)

    [教程主题]:Nginx+php [课程录制]: 创E [主要内容] [1] 编译PHP 初始环境: 为了省事把所需要的库文件全都安装上,可以使用rpm包安装,也可以用yum命令安装, yum -y  ...