1.1 简介

                        

师出同门,与log4j一样,logback也是由Ceki Gülcü开发的开源日志组件,可以说是log4j的改进版;在现如今的项目中,logback的出现次数越来越多,是目前主流首选的日志记录工具。

1.2 logback结构

                        

logback分成三个模块:logback-core,logback- classic,logback-access。

logback-core提供了logBack的核心功能,是另外两个组件的基础;

logback-classic模块实现了SLF4J API;

logback-access模块与Servlet容器集成提供Http来访问日志的功能。

1.3 使用

首先,需要在应用的pom.xml中添加依赖:

<!--slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency> <!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>

其次,声明测试代码:

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class slf4j_logbackDemo {
Logger logger= LoggerFactory.getLogger(slf4j_logbackDemo.class); @Test
public void test() {
logger.debug("debug message");
logger.info("info message");
logger.warn("warning message");
logger.error("error message");
logger.warn("login message");
}
}

最后,在classpath下声明配置文件:logback.xml;

<!--每天生成一个文件,归档文件保存30天:-->
<configuration > <!--设置自定义pattern属性-->
<property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%thread] [%logger] %msg%n"/> <!--控制台输出日志-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--设置控制台输出日志的格式-->
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender> <!--滚动记录日志文件:-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--当天生成的日志文件名称:-->
<file>e:/log.out</file>
<!--根据时间来记录日志文件:-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--归档日志文件的名称:-->
<fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--归档文件保存30天-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--生成的日志信息格式-->
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender> <!--根root logger-->
<root level="DEBUG">
<!--设置根logger的日志输出目的地-->
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root> </configuration>

通过以上步骤,logback就可以正常的运行了。

1.4 配置文件详解

(1)configuration:配置根节点

                  
<configuration scan="true" scanPeriod="60" debug="false"></configuration>  

scan:程序运行时配置文件被修改,是否重新加载。true,重新加载;false,不重新加载;默认为true;

scanPeriod:监测配置文件被修改的时间间隔,scan属性必须设置为true才可生效;默认为1分钟,默认单位是毫秒;

debug:是否打印logback程序运行的日志信息。true,打印;false,不打印;默认为false;

(2)property:属性变量

<configuration scan="true" scanPeriod="60" debug="false">
<property name="pattern" value="%d{HH:mm:ss.SSS} [%-5level] [%logger] %msg%n" ></property>
</configuration> name:变量的名称,可以随意起名,但建议名字要简明直译; value:变量的值; 在配置文件中,我们可以用 ${} 的方式来使用,将变量引入到其他节点中去。如果有多处使用相同的内容,便可使用属性变量的方式进行统一,减少很多不必要的代码;

(3)logger<logger>:日志对象

logger分为2种,一种是普通日志对象,另一种是根日志对象。对于大部分应用来说,只设置根日志对象即可。
在java日志系统中,无论是log4j还是logback,他们的日志对象体系都是呈现“树”的形式,根日志对象为最顶层节点,其余包或者类中的日志对象都继承于根日志节点; 对于普通日志对象来说,我们可以设置某一个包或者某一个类的日志级别,还可以单独设置日志的输出目的地; <configuration scan="true" scanPeriod="60" debug="false">
<logger name="java.sql" level="debug" addtivity="true">
<appender-ref ref="CONSOLE" />
</logger>
</configuration> name:用来指定此logger属于哪个包或者哪个类; level:用来指定此logger的日志打印级别; addtivity:是否向上传递日志打印信息。之前说了,logger对象呈现一个树的结构,根logger是树的顶端,下面的子logger的addtivity属性如果设置为true则会向上传递打印信息,出现日志重复打印的现象; appender-ref:日志输出目的地,将此logger所打印的日志交给此appender; 值得注意的是,上面的例子中,如果此logger没有指定appender,而且addtivity也设置为true,那么此logger对应的日志信息只会打印一遍,是由root来完成的;但是如果addtivity设置成false,那么此logger将不会输出任何日志信息;

(4)logger<root>:根日志对象

<root>也是日志对象中的一种,但它位于logger体系中的最顶层。当一个类中的logger对象进行打印请求时,如果配置文件中没有为该类单独指定日志对象,那么都会交给root根日志对象来完成;

<root>节点中只有一个level属性,还可以单独指定日志输除目的地<apender-ref>;

<configuration scan="true" scanPeriod="60" debug="false">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>

(5)appender:日志输出目的地

                  

与log4j中的appender一样,logback中的<appender>节点也同样负责日志输出的目的地。

appender中有2个必填属性--name和class。name为<appender>节点的名称,class为<appender>的全限定类名,也就是日志输出目的地的处理类。此外,我们还可以在<appender>中单独指定日志的格式,设置日志过滤器等操作;

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>

在logback中,主要有以下三种日志目的地处理类:

①ch.qos.logback.core.ConsoleAppender

将日志输出到控制台,可以在其节点中设置<encoder>子节点,设置日志输出的格式;

例子:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>

②ch.qos.logback.core.FileAppender

将日志输出到具体的磁盘文件中,可以单独指定具体的位置,也可以设置日志的输出格式;

例子:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender> 子节点<append>:新增的日志是否以追加到文件结尾的方式写入到log.out文件中,true为追加,fasle为清空现存文件写入;
子节点<prudent>:日志是否被安全的写入磁盘文件,默认为false。如果为true,则效率低下;

③ch.qos.logback.core.rolling.RollingFileAppender

滚动记录日志,当符合<rollingPolicy>节点中设置的条件时,会将现有日志移到新的文件中去。<rollingPolicy>节点中可设置的条件为:文件的大小、时间等;

例子:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

④ch.qos.logback.classic.AsyncAppender

异步记录日志,内部通过使用缓存的方式来实现异步打印,将日志打印事件event放入缓存中。具体数据结构为BlockingQueue;

例子:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>512</queueSize>
<appender-ref ref ="FILE"/>
</appender> 子节点<queueSize>:指的是BlockingQueue的队列容量大小,默认为256个;
子节点<discardingThreshold>:如果BlockingQueue中还剩余20%的容量,那么程序会丢弃TRACE、DEBUG和INFO级别的日志打印事件event,只保留WARN和ERROR级别的。为了保留所有的日志打印事件,可以将该值设置为0。

(5)rollingPolicy

日志文件的滚动策略,与RollingFileAppender搭配使用,当日志文件发生变动时决定RollingFileAppender的行为;

在<rollingPolicy>节点中有一个class属性,可选的值为TimeBasedRollingPolicy、FixedWindowRollingPolicy、TriggeringPolicy;

其中ch.qos.logback.core.rolling.TimeBasedRollingPolicy表示根据时间制定日志文件的滚动策略;

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>

ch.qos.logback.core.rolling.FixedWindowRollingPolicy表示如果日志文件大小超过指定范围时,会根据文件名拆分成多个文件;

<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>

(6)triggeringPolicy

与<rollingPolicy>节点一样,<triggeringPolicy>节点也属于日志滚动策略中的一种。

ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy表示根据日志文件大小,超过制定大小会触发日志滚动;

 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>

(7)encoder

日志格式化节点,负责格式化日志信息。<encoder>只负责了两件事情,第一负责将日志信息转换成字节数组,第二将字节数组写到输出流当中去;

在<encoder>中使用<pattern>来设置对应的格式;

<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder

%logger:表示输出logger名称,后面跟一个{0}表示:只输出logger最右边点符号之后的字符串;例如:com.jiaboyan.test ---> test;

%d{HH:mm:ss.SSS}:表示格式化日期输出,14:06:49.812;

%line:输出执行日志请求的行号。

%thread:表示产生日志的线程名;

%level:输出日志级别;

%method:输出执行日志请求的方法名;

%class:输出日志打印类的全限定名,后面跟{0}表示,含义为全限定类名最右边点符号之后的字符串。例如:com.jiaboyan.test ---> test;

%-4relative含义:符号减号“-”是左对齐 标志,接着是可选的最小宽度 修饰符,用十进制数表示。relative是输出从程序启动到创建日志记录的时间,单位是毫秒;

%msg:表示应用程序提供需要打印的日志信息;

%n:表示换行符;

参考:https://www.jianshu.com/p/1b091bb0147c

Java日志体系(五)logback的更多相关文章

  1. Java混乱的日志体系(logback)(转)

    作为一名 Java 程序员,日常开发工作中肯定会接触日志系统,但是众多的框架,包括 Log4j.Log4j2.Logback.Slf4j.Apache Common logging 等等,引用的 ma ...

  2. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  3. java 日志体系目录

    java 日志体系目录 1.1 java 日志体系(一)log4j1.log4j2.logback.jul.jcl.slf4j 1.2 java 日志体系(二)jcl 和 slf4j 2.1 java ...

  4. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  5. Java 日志体系(二)jcl 和 slf4j

    Java 日志体系(二)jcl 和 slf4j <java 日志体系(一)统一日志>:https://www.cnblogs.com/binarylei/p/9828166.html &l ...

  6. Java 日志体系

    Java 日志体系 <java 日志和 SLF4J 随想>:http://ifeve.com/java-slf4j-think/ 一.常用的日志组件 名称 jar 描述 log4j log ...

  7. java日志体系的思考(转)

    Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用 ...

  8. 混乱的 Java 日志体系

    混乱的 Java 日志体系 2016/09/10 | 分类: 基础技术 | 0 条评论 | 标签: LOG 分享到: 原文出处: xirong 一.困扰的疑惑 目前的日志框架有 jdk 自带的 log ...

  9. Java日志体系居然这么复杂?——架构篇

    本文是一个系列,欢迎关注 日志到底是何方神圣?为什么要使用日志框架? 想必大家都有过使用System.out来进行输出调试,开发开发环境下这样做当然很方便,但是线上这样做就有麻烦了: 系统一直运行,输 ...

随机推荐

  1. 构建之法个人作业5——alpha2项目测试

    [相关信息] Q A 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在 ...

  2. BZOJ 1093 强连通缩点+DAG拓扑DP

    缩点后在一个DAG上求最长点权链 和方案数 注意转移条件和转移状态 if (nowmaxn[x] > nowmaxn[v]) { ans[v] = ans[x]; nowmaxn[v] = no ...

  3. AGC刷题记

    已经刷不了几天了... AGC001 A-BBQ Easy 排个序就过了 B-Mysterious Light 手膜一下,你会发现魔改一下\(gcd\)就行了 C-Shorten Diameter 刚 ...

  4. QT 设置应用程序图标和可执行程序图标

    1, 首先准备个ICO图标.例如:myappico.ico 在工程目录下新建images文件夹并你的图标myappico.ico(只能用ico格式的图片)放到工程目录下的images文件夹下 2, 用 ...

  5. Nginx的TCP/UDP调度器

    安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...

  6. js面向对象学习笔记

    1.函数的定义方式 第一种定义方式 function fn1() { alert("fn1"); } alert(fn) 函数就是一个特殊的对象,是一个Function类的实例,其 ...

  7. CF280C

    CF280C ZR补题计划 题意: 一棵有根树,每次选择一个未删除的节点,然后删除它和它的子树内的点,问期望删多少次可以把整个树删完 解析: 显然,通过题面,我们可以知道对于一个点对 $ (u,v) ...

  8. redis redis-cli

    默认无权限控制: 远程服务连接: $ redis-cli -h 127.0.0.1 -p 6379 windows下 :redis-cli.exe -h 127.0.0.1 -p 6379 redis ...

  9. godaddy SSL证书不信任

    在使用网上教程的部署godaddy证书,会出现证书不受信任的情况. 各别审核比较严格的浏览器会阻止或者要求添加例外.情况如下: 利用在线证书测试工具会提示根证书的内容为空.从而导致证书不受信任. 解决 ...

  10. LVS之DR模式

    目录: 网络环境 LVS服务器网络配置 LVS服务器添加ipvs规则 RS服务器配置 访问验证 抓包分析 注意事项 [网络环境] 网络拓扑结构如下表: 服务器 类型 网卡 IP MAC 说明 v_me ...