1、Logback为取代log4j而生

Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。

2、Logback的核心对象:Logger、Appender、Layout

Logback主要建立于Logger、Appender 和 Layout 这三个类之上。

Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。Logger对象一般多定义为静态常量,如:

 1 package com.logs;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 public class MyApp {
7 final static Logger logger = LoggerFactory.getLogger("MyApp.class");
8 public static void main(String[] args) {
9
10 logger.trace("trace");
11 logger.debug("debug str");
12 logger.info("info str");
13 logger.warn("warn");
14 logger.error("error");
15 }
16 }

Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。

Layout:负责把事件转换成字符串,格式化的日志信息的输出。具体的Layout通配符,可以直接查看帮助文档。

3、Level 有效级别

Logger可以被分配级别。级别包括:TRACE、DEBUG、INFO、WARN和ERROR,定义于ch.qos.logback.classic.Level类。程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。如果设置级别为INFO,则优先级高于等于INFO级别(如:INFO、 WARN、ERROR)的日志信息将可以被输出,小于该级别的如DEBUG将不会被输出。为确保所有logger都能够最终继承一个级别,根logger总是有级别,默认情况下,这个级别是DEBUG。

4、 三值逻辑

Logback的过滤器基于三值逻辑(ternary logic),允许把它们组装或成链,从而组成任意的复合过滤策略。过滤器很大程度上受到Linux的iptables启发。这里的所谓三值逻辑是说,过滤器的返回值只能是ACCEPT、DENY和NEUTRAL的其中一个。

如果返回DENY,那么记录事件立即被抛弃,不再经过剩余过滤器;

如果返回NEUTRAL,那么有序列表里的下一个过滤器会接着处理记录事件;

如果返回ACCEPT,那么记录事件被立即处理,不再经过剩余过滤器。

5、Filter 过滤器

Logback-classic提供两种类型的过滤器:常规过滤器和TuroboFilter过滤器。Logback整体流程:Logger 产生日志信息;Layout修饰这条msg的显示格式;Filter过滤显示的内容;Appender具体的显示,即保存这日志信息的地方。

6、具体使用案例

Java项目中一般都会应用比如struts、spring、hibernate等开源框架,而这些框架很多是应用log4j记录日志的,所以我们考虑用log4j + slf4j + logback 。这样我们需要导入log4j-over-slf4j-1.6.4.jar 、logback-classic-1.0.1.jar 、logback-core-1.0.1.jar 、slf4j-api-1.6.4.jar ,如果你要用到EvaluatorFilter过滤器来过滤日志Msg中的特殊字符需要导入其依赖包janino-2.3.2.jar。其logback.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <configuration>
3
4 <!-- 控制台输出 -->
5 <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
6 <encoder>
7 <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
8 </encoder>
9 </appender>
10
11 <!-- 时间滚动输出 level为 DEBUG 日志 -->
12 <appender name="file—debug"
13 class="ch.qos.logback.core.rolling.RollingFileAppender">
14 <filter class="ch.qos.logback.classic.filter.LevelFilter">
15 <level>DEBUG</level>
16 <onMatch>ACCEPT</onMatch>
17 <onMismatch>DENY </onMismatch>
18 </filter>
19 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
20 <FileNamePattern>D:/logs/debug.%d{yyyy-MM-dd}.log</FileNamePattern>
21 <MaxHistory>30</MaxHistory>
22 </rollingPolicy>
23 <encoder>
24 <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
25 </encoder>
26 </appender>
27
28 <!-- 时间滚动输出 level为 ERROR 日志 -->
29 <appender name="file—error"
30 class="ch.qos.logback.core.rolling.RollingFileAppender">
31 <filter class="ch.qos.logback.classic.filter.LevelFilter">
32 <level>ERROR</level>
33 <onMatch>ACCEPT</onMatch>
34 <onMismatch>DENY </onMismatch>
35 </filter>
36 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
37 <FileNamePattern>D:/logs/error.%d{yyyy-MM-dd}.log</FileNamePattern>
38 <MaxHistory>30</MaxHistory>
39 </rollingPolicy>
40 <encoder>
41 <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
42 </encoder>
43 </appender>
44
45 <!-- 特定过滤含有某字符串的日志 -->
46 <appender name="file-str"
47 class="ch.qos.logback.core.rolling.RollingFileAppender">
48 <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
49 <evaluator>
50 <expression>message.contains("str")</expression>
51 </evaluator>
52 <onMatch>ACCEPT</onMatch>
53 <onMismatch>DENY</onMismatch>
54 </filter>
55 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
56 <FileNamePattern>D:/logs/contains.%d{yyyy-MM-dd}.log
57 </FileNamePattern>
58 <MaxHistory>30</MaxHistory>
59 </rollingPolicy>
60 <encoder>
61 <pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
62 </encoder>
63 </appender>
64
65 <!-- 数据库输出 -->
66 <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
67 <connectionSource
68 class="ch.qos.logback.core.db.DriverManagerConnectionSource">
69 <driverClass>com.mysql.jdbc.Driver</driverClass>
70 <url>jdbc:mysql://host_name:3306/datebase_name</url>
71 <user>username</user>
72 <password>password</password>
73 </connectionSource>
74 </appender>
75
76 <logger name="java.sql.Connection">
77 <level value="DEBUG" />
78 </logger>
79 <logger name="java.sql.Statement">
80 <level value="DEBUG" />
81 </logger>
82 <logger name="com.ibatis">
83 <level value="DEBUG" />
84 </logger>
85 <logger name="com.ibatis.common.jdbc.SimpleDataSource">
86 <level value="DEBUG" />
87 </logger>
88 <logger name="com.ibatis.common.jdbc.ScriptRunner">
89 <level value="DEBUG" />
90 </logger>
91 <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate">
92 <level value="DEBUG" />
93 </logger>
94 <logger name="com.danga.MemCached">
95 <level value="INFO" />
96 </logger>
97 <logger name="org.springframework.test">
98 <level value="DEBUG" />
99 </logger>
100 <logger name="org.apache.struts2">
101 <level value="DEBUG" />
102 </logger>
103
104 <root level="DEBUG">
105 <appender-ref ref="stdout" />
106 <appender-ref ref="file—debug" />
107 <appender-ref ref="file—error" />
108 <appender-ref ref="file-str" />
109 <appender-ref ref="db" />
110 </root>
111
112 </configuration>
 
 
http://www.cnblogs.com/yongze103/archive/2012/05/05/2484753.html

Logback 简单使用的更多相关文章

  1. Logback简单使用

    1.     添加jar包/maven配置 <dependency> <groupId>ch.qos.logback</groupId> <artifactI ...

  2. java日志之slf4j与logback简单使用

    最近在开发遇到日志是使用slf4j与logback.xml的配置,所以就记录下来了. 1.导入这几个jar包: Logback 分为三个模块:logback-core,logback-classic, ...

  3. Java : logback简单配置

    需要把logback.xml文件放在类路径下,如果是spring boot项目可以用 logging.config=classpath:log/xxxxxx.xml来指定配置文件 logback la ...

  4. Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)

    转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...

  5. slf4j,log4j,logback 初步使用

    log4j,slf4j,logback简单介绍见 LogBack简易教程 Logback浅析 简单的将,slf4j是一个日志的框架,有各种日志的接口,但是并不包含实际的写日志的方法. log4j,lo ...

  6. SSM-MyBatis-03:Mybatis中简单的整合日志

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------简单的整合日志,首先提供俩种方式,log4j和logback简单的说一下logback,他由log4j的原作者编 ...

  7. Spring Boot2 系列教程(二十) | SpringBoot 是如何实现日志的?

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 休息日闲着无聊看了下 SpringBoot 中的日志实现,把我的理解跟大家说下. 门面模式 说到日志框架不得不说门面模式.门面 ...

  8. Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结

    1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...

  9. java日志打印使用指南

    一.简介 日志打印是java代码开发中不可缺少的重要一步. 日志可以排查问题,可以搜集数据 二.常用日志框架 比较常用的日志框架就是logback, 一些老项目会使用log4j,他们用的都是slf4j ...

随机推荐

  1. C#_IComparer实例 - 实现ID或者yearOfscv排序

    调用LIST的Sort的时候会调用IComparer的默认实现,quicksort会调用每个元素的CompareTo的IComparable实现 using System; using System. ...

  2. Input

    Input Basic Input Old Input Files Please note that both Input and Request do NOT sanitize your data, ...

  3. How to solve GM MDI cannot complete the installation

    Dear Joy, I have a problem using GM MDI diagnostic tool. When I installed it on my laptop, the tool ...

  4. arcgis 绝对、相对、UNC 和 URL

    您每天都通过路径浏览至数据和工具箱.在共享数据和工具之前,您对此可能没有做太多考虑,其实您也无需考虑.本部分将详细讨论以下方面内容:路径.定义不同类型的路径以及 ArcGIS 对路径的管理方式. 路径 ...

  5. show status详解

    Aborted_clients 某种原因客户程序不能正常关闭连接而导致失败的连接的数量.没有正常关闭 Aborted_connects 指出试图连接到MYSQL的失败的次数.这种情况在客户尝试用错误的 ...

  6. [转]Oracle 调用存储过程并显示结果集 Oracle.DataAccess.Client OracleDbType.RefCursor

    本文转自:http://liye9801.blog.163.com/blog/static/6019703200901244448950/ 今天学习了一个Oracle中的存储过程,一开始便被如果返回结 ...

  7. hasLayout与Block formatting contexts的学习(下)

    BFC布局规则: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin决定.属于同一个BFC的两个相邻Box的margin会发生重叠 每个元素的margin box的左边, ...

  8. Android开发之闹钟

    闹钟开发: 1.需要时间选择器TimePicker 2.需要Calendar类对日期时间进行操作 3.需要AlarmManager//闹钟管理实质是一个全局定时器, 是Android中常用的一种系统级 ...

  9. MongoDB启动配置等

    目录: 一.mongoDB 启动配置 二.导出,导入,运行时备份 三.Fsync锁,数据修复 四.用户管理,安全认证 一.启动项 mongod --help C:\Windows\system32&g ...

  10. HTML <input> 标签的 type 属性

    HTML <input> 标签的 type 属性 HTML <input> 标签 实例 下面的表单拥有两个输入字段以及一个提交按钮: <form action=" ...