什么是 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. Python调用jar包中的方法

    [本文出自天外归云的博客园] 需求 最近在后台项目代码中一段自定义的AES加解密的程序在平时的测试工作中应用频繁.因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意.最后转换思路 ...

  2. ARKit从入门到精通(7)-ARCamera介绍

    ARCamera是一个相机,它是连接虚拟场景与现实场景之间的枢纽.在ARKit中,它是捕捉现实图像的相机,在SceneKit中它又是3D虚拟世界中的相机.(一般第一人称3D游戏,主角其实就是一个3D相 ...

  3. ARKit从入门到精通(6)-ARSession介绍

    转载:http://blog.csdn.net/u013263917/article/details/73157082 ARSession是一个连接底层与AR视图之间的桥梁,其实ARSCNView内部 ...

  4. Django的安装要点

    Django 的安装: 安装包: 百度盘里搜索"Django-1.7.tar.gz" 安装环境 WIN7 解压文件 移动到python安装目录下 python setup.py i ...

  5. RabbitMQ文档翻译——Work queues

    原文链接:https://www.rabbitmq.com/tutorials/tutorial-two-java.html Work Queues (using the Java Client) I ...

  6. [命令]在uboot下查看文件系统的目录结构

    在uboot下敲help可以查看该版本的uboot支持哪些命令 ls mmc 1:1 ls mmc 1:2 可以查看mmc设备上对应的文件目录,支持多种文件系统格式,如fat32/ext

  7. me909e-821 拨号流程

    第一次: at+cereg=1                                                                      OK              ...

  8. kafka集群中jmx端口设置

    jmx端口主要用来监控kafka集群的. 在启动kafka的脚本kafka-server-start.sh中找到堆设置,添加export JMX_PORT="9999" if [ ...

  9. SQLServer2005重建索引前后对比【转】

    在做维护项目的时,我们经常会遇到索引维护的问题,通过语句,我们就可以判断某个表的索引是否需要重建. 执行一下语句:先分析表的索引 分析表的索引建立情况:DBCC showcontig('Table') ...

  10. destoon 添加一个新的模块

    根目录rename,中config.inc.php文件/module/rename下两个文件,my.inc.php ,rename.class.php/module/rename/admin/三个文件 ...