`

Logback浅析

    博客分类:
  • java
 
阅读更多

1、Logback为取代log4j而生

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

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

     Logback主要建立于LoggerAppender  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>
分享到:
评论

相关推荐

    Logback类库含logback.xml配置文件

    Logback 是一个流行的 Java 日志框架,由 Ceki Gülcü 创建,他是早期日志框架 Log4j 的主要开发者。Logback 是为了提供更高效、更灵活的日志记录解决方案而设计的,它不仅继承了 Log4j 的优点,还解决了一些性能和...

    logback下载 日志文件jar包

    Logback 是一款广泛使用的日志记录框架,由 Ceki Gülcü 创建,作为其先前作品 Log4j 的改进版。这个压缩包包含了实现 Logback 功能所需的几个关键组件,以及一个配置文件,使得用户能够方便地管理和记录应用程序的...

    Logback框架需要的3个jar包和logback.xml文件

    Logback 是一个在Java应用程序中广泛使用的日志记录框架,它是对早期的log4j框架的一个升级和扩展。Logback 提供了高效、灵活的日志记录解决方案,支持多种日志级别,如DEBUG、INFO、WARN、ERROR等,帮助开发者调试...

    logback所需jar包

    **日志框架Logback** 日志是任何软件系统中至关重要的组成部分,它为开发者提供了运行时的调试信息、错误报告以及性能分析数据。在Java世界里,Logback是一款高效、可配置的日志记录框架,由Ceki Gülcü(也是log4...

    logback.的jar包

    **日志框架Logback简介** Logback 是一个用于日志记录的开源框架,由 Ceki Gülcü(也是 Log4j 的创始人)设计并开发。它作为 Log4j 的升级版,提供了更高的性能和更丰富的功能。Logback 分为三个主要组件:...

    logback jar包和logback.xml配置文件打包下载 小白新手学Java

    在这里,我们关注的是SLF4J的API库`slf4j-api-1.7.26.jar`,以及Logback的两个核心组件`logback-core-1.2.3.jar`和`logback-classic-1.2.3.jar`,以及配置文件`logback.xml`。 首先,`slf4j-api-1.7.26.jar`是SLF4J...

    Logback所需的jar包

    免费获取Logback所需的jar包 打包合集 让你少走弯路 一.logback简介 1.logback: Logback是由log4j创始人设计的另一个开源日志组件。(好的日志记录方式可以提供我们足够多的定位错误的依据)。 2.主要有三个模块...

    Logback日志系统文件

    分享的文件包括Logback的相关jar包和核心配置文件。 Logback是由log4j创始人设计的另一个开源日志组件,基于slf4j的日志规范实现的框架,性能比log4j要好。 Logback主要分为三个技术模块: logback-core:该模块为...

    logback官方中文版文档.pdf

    Logback 是一个专门为Java应用程序设计的日志框架,由log4j的创始人Ceki Gülcü设计,旨在提高日志处理的效率和灵活性。它在性能和资源消耗方面优于log4j和其他日志系统,提供了许多独特的特性,如Marker、参数化...

    Slf4j+logback实现logback测试

    **Slf4j与Logback简介** Slf4j(Simple Logging Facade for Java)是一个日志门面,它提供了一个统一的API,允许开发者选择合适的日志框架,如Logback、Log4j等,而无需修改代码。Slf4j的主要目标是为各种日志框架...

    logback日志记录写入kafka

    Logback允许用户通过实现`ch.qos.logback.core.UnsynchronizedAppenderBase`或`ch.qos.logback.core.AppenderBase`类并覆盖`append()`方法来自定义日志处理逻辑。例如,我们可以解析JSON格式的日志,从中提取关键...

    logback-core-1.2.10-API文档-中文版.zip

    赠送jar包:logback-core-1.2.10.jar; 赠送原API文档:logback-core-1.2.10-javadoc.jar; 赠送源代码:logback-core-1.2.10-sources.jar; 赠送Maven依赖信息文件:logback-core-1.2.10.pom; 包含翻译后的API文档...

    logback类库.rar

    《logback类库详解》 在Java开发领域,日志管理是不可或缺的一部分,它帮助开发者追踪应用程序的运行状态,定位和解决问题。Logback是其中一个广泛使用的日志框架,由Ceki Gülcü创建,它是对log4j的一个升级版本...

    logback

    **标题:“logback”** **描述:** 在IT领域,logback是一个广泛使用的日志记录框架,由Ceki Gülcü创建,它是log4j的后续项目,旨在提供更高的性能和更灵活的配置。Logback的主要目标是提高日志处理的效率,同时...

    logback-1.1.3.zip

    2. **组件结构**:Logback 主要由三个核心组件构成:Logback-Core、Logback-Classic 和 Logback-Appender。Logback-Core 提供基础架构,Logback-Classic 实现了 SLF4J(Simple Logging Facade for Java)接口,而 ...

    logback的jar文件

    本文将详细介绍logback的三个核心jar文件:logback-classic-1.1.7.jar、logback-core-1.1.7.jar和slf4j-api-1.7.21.jar,以及它们在日志处理中的作用。 1. **logback-classic-1.1.7.jar** logback-classic是...

    logback-1.1.2源码包

    **logback-1.1.2源码包详解** **一、logback介绍** Logback 是一个用于日志记录的开源框架,由 Ceki Gülcü(也创建了广泛使用的 log4j)开发。它是对 log4j 的升级,旨在提供更高的性能、更灵活的配置以及更好的...

    logback中文文档pdf

    Logback 主要分为三个组件:logback-core、logback-classic 和 logback-access。logback-core 提供基础架构,而 logback-classic 实现了经典的 SLF4J(Simple Logging Facade for Java)API,并包含一个名为...

    logback 1.2.3.zip

    "logback-classic-"和"logback-core-1.2"分别代表Logback的经典日志实现和核心库,它们是Logback框架的重要组成部分。 **文件名称列表** - "logback-core-1.2.3.jar": 这是Logback的核心组件,提供了日志记录的...

    Logback中文文档-实用

    Logback是Java中一个非常流行的日志记录库,它是log4j的替代者,由log4j创始人之一Ceki Gülcü编写。Logback中文文档是一份关于Logback使用和配置的全面指南,它提供了深入的理论知识和实用的API应用,覆盖了...

Global site tag (gtag.js) - Google Analytics