什么是 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. LeetCode: Search in Rotated Sorted Array 解题报告

    Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...

  2. Leetcode:Longest Substring Without Repeating Characters 解题报告

    Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...

  3. 06Vue.js快速入门-Vue组件化开发

    组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...

  4. 无线投屏PC投电视

    http://www.waxrain.com/index.html 电脑投到电视上,看看PPT,显示电脑屏幕完全ok.

  5. JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性

    说明(2017-4-2 18:27:11): 1. 作为函数的参数,就是将函数的数据拷贝一份,传递给函数的定义中的参数. 函数foo()在调用的时候,做了两件事: (1)函数在调用的时候,首先需要将参 ...

  6. java结合js获取验证码

    框架springmvc 1.后台java代码: package com.fh.controller.system.secCode; import java.awt.Color; import java ...

  7. 解决mysql group by和count同时使用的问题

    例如这样一个表,我想统计email和passwords都不相同的记录的条数 CREATE TABLE IF NOT EXISTS `test_users` ( `email_id` ) unsigne ...

  8. DevExpress控件安装和初次使用图解

    安装: 解压后包含这么多东东.执行选中的那个: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fil ...

  9. 【oneday_onepage】——Tastes differ!

    You know Ian and Felton can be really boring sometimes. They're always arguing, like. like children. ...

  10. PCL中IO模块和类的介绍

    I/O模块中共有21个类 (1)class pcl::FIleReader:定义了PCD文件的读取接口,主要用作其他读取类的父类   pcl::FileReader有pcl::PCDReader和pc ...