一. 背景

最近因为学习项目时需要使用logback日志框架来打印日志, 使用过程中碰到很多的疑惑, 而且需要在控制台打印mybatis执行的sql语句, 于是决定沉下心来

研究一下logback的使用。

二. Logback日志级别

Logback日志级别主要有7个, 分别为OFF>ERROR>WARN>INFO>DEBUG>TRACE>ALL

定义在ch.qos.logback.classic.Level类中, 一般只需用ERROR,WARN,INFO,DEBUG这四个级别就行了

Logback处理日志级别时一般遵从输出级别大于等于所声明的级别的日志。

三. Filter

自己常用的两个Filter为ch.qos.logback.classic.filter.LevelFilter, ch.qos.logback.classic.filter.ThresholdFilter, 其他的没有深究

LevelFilter: 如果指定lever为debug, 只处理debug级别的日志

ThresholdFilter: 如果指定lever为debug,只处理>=debug级别的日志

<filter>标签写在<appender>标签类, 用来指明<appender>标签处理日志的级别

四. <logger> 和 <root> 

<logger>标签有3个属性

name: 可以为具体某个类, 或者一个包名(这样也会处理子包), 必选

lever: 可选, 声明级别, 不写默认继承上一级的lever

additivity: 值为true/false, 是否把打印日志传递到上一级中, 如果<logger>已经指定了<appender>, 应该将值置为false, 否则会重复打印, 即本身打印一次

上一级还会打印。如果没有指定<appender>, 则置为true, 值默认也为true

<root>为最顶层的上级, 上下级应该是根据包名来说的

指定的<logger>会处理对应包名的log, 根据additivity的值判断是否再交给上一级处理

<root>会处理剩下没有指定<logger>来处理的日志, 当然该<logger>的additivity值为true, 那么<root>也会处理该logger处理过的日志, 是一个最大的范围。

五. 处理日志级别的流程

如果级别大于 等于<root>或者<logger>设置的级别, 那么会继续与<appender>所设置的过滤方式比较, 否则直接拒绝.

六. 详细配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- 60秒扫描一次该配置文件是否有更改 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--声明一个变量, 代表日志文件的根目录 -->
<property name="LOG_HOME" value="E:/logs"/>
<!--输出到控制台 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoding>UTF-8</encoding>
<encoder>
<!--打印格式
%d 日期 24小时制:分:秒.毫秒数
%p 日志级别优先级
%c 打印日志的全类名
%t 线程名
%m message, 打印的信息
%n 换行
-->
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
</encoder>
<!--处理日志级别, ThresholdFilter处理大于等于level标签声明的级别
onMatch=accept 符合上述所说级别, 本例大于等于DEBUG级别
onMismatch=deny 不符合拒绝不输出, 本例小于DEBUG级别
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> <!-- 输出到文件, 日志级别对应info级别(只能info级别日志被输出) -->
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/info.log</File>
<!--将日志按时间打包, 内容追加到文件后, 最大保留最近10天的日志记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
<append>true</append>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
</encoder>
<!--处理INFO, 不匹配直接拒接, LevelFilter只处理与level标签相同的级别 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> <!-- 输出到文件, 日志级别对应ERROR级别(只能ERROR级别日志被输出) -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME}/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
<append>true</append>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss.SSS}][%p][%c{40}][%t] %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> <!-- mybatis sql 日志 -->
<logger name="com.waston.dao" level="DEBUG" additivity="false">
<appender-ref ref="console" />
</logger> <!-- 整个项目 log 日志 -->
<logger name="com.waston" level="DEBUG" additivity="false">
<appender-ref ref="error" />
<appender-ref ref="info" />
<appender-ref ref="console"/>
</logger> <!--处理<logger>未处理的日志, 比如项目所引用别的框架的日志 -->
<root level="DEBUG">
<appender-ref ref="console"/>
<appender-ref ref="error"/>
<appender-ref ref="info"/>
</root> </configuration>

上述配置声明3个<appender>

控制台打印DEBUG级别以上的日志

INFO文件只打印INFO级别的日志

ERROR文件只打印ERROR级别的日志

七. 结语

记录使用logback的一些疑惑,供自己以后参考学习, 如有人看到指出错误将不胜感激。

初探日志框架Logback的更多相关文章

  1. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  2. 为什么要用日志框架 Logback 基本使用

    [日志框架]以时间为单位描述应用项目运行状态:用户下线.接口超时.数据库崩溃等等一系列事件 [日志框架能力] 1.定制输出格式 2.定制输出目标 3.携带 Context 比如 HelloWorld. ...

  3. 【Java】Java日志框架Logback的简单例子

    常用的日志框架 SLF4J,全称Simple Logging Facade for Java,即Java简单日志外观框架,顾名思义,它并非具体的日志实现,而是日志外观框架 java.util.logg ...

  4. SpringBoot整合日志框架LogBack

    日志可以记录我们应用程序的运行情况,我们可以通过日志信息去获取应用程序更多的信息.常用处理java日志的组件有:slf4j.log4j.logback.common-logging等.其中log4j是 ...

  5. 后端——框架——日志框架——logback——《官网》阅读笔记——第一章节

    第一章节搭建了logback日志框架的环境,演示了Hello World的示例,并详细分析了示例. 搭建日志框架的过程非常简单,只需要在项目的classpath上添加以下三个jar包,logback- ...

  6. Java日志框架-logback的介绍及配置使用方法(纯Java工程)(转)

    说明:内容估计有些旧,2011年的,但是大体意思应该没多大变化,最新的配置可以参考官方文档. 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分 ...

  7. Java日志框架-logback配置文件参考(转)

    logback.xml <!-- if debug set to true, context info always print otherwise the contex info will p ...

  8. Java日志框架-logback配置文件多环境日志配置(开发、测试、生产)(原始解决方法)

    说明:这种方式应该算是最通用的,原理是通过判断标签实现. <!-- if-then form --> <if condition="some conditional exp ...

  9. Java日志框架-Logback手册中文版以及官方配置文档教程

    Logback手册中文版:(链接: https://pan.baidu.com/s/1bpMyasR 密码: 6u5c),虽然版本有点旧,但是大体意思差不多,先用中文版了解个大概,然后一切最新的配置以 ...

随机推荐

  1. 统计方形(NOIP1997)

    给链接:统计方形 这题是棋盘问题的数据加强版. 其实由于洛谷的数据比较水,所以你把我在棋盘问题题解中写的代码提交,也能AC. 但让给我们来看一个更优的解法. 先给代码: #include<bit ...

  2. 再读c++primer plus 003

    1.如果函数返回一个结构而不是一个指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup.但在返回值为引用时,将直接复制给变量,其效率更高. 2.返回引用时最重要的一点是,应避免返回 ...

  3. Linux网桥模式配置

    Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联: 思路其实很简单:就是将虚拟出一个bridge口,将对应的有线LAN和无线LAN都绑定在这个虚拟bridge口上,并给这个brid ...

  4. 算法工程师A

    美团点评2017校招笔试真题-算法工程师A   美团点评2017校招笔试真题-算法工程师A 1.下面哪种STL容器的实现和其它三个不一样 A. set B. deque C. multimap D. ...

  5. from __future__ import

    读代码的过程中看到的,好奇搜索了一下,其实当在我们调试别人Python代码的过程中经常会遇到一些问题,比如版本不同,代码也会有所改变,比如print函数 Python 2.7版本为 print “ ” ...

  6. MySQL按日、周、月统计数据

    知识关键词:DATE_FORMAT ps:如果时间字段为时间戳则,DATE_FORMAT(from_unixtime(create_time),'%Y-%u') select DATE_FORMAT( ...

  7. BUG YII2.0 $ is not defined

    来源:https://www.cnblogs.com/attitudeY/p/6279985.html BUG描述:$ is not defined 没有加载jquery成功 原因:Yii2.0将JS ...

  8. Win7 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  9. 利用cglib包实现Spring中aop的<aop:advisor>功能

    一:前言 还有<aop:before>/<aop:after>/<aop:around>的没有实现,不过根<aop:advisor>是差不多的,就是要额 ...

  10. idea配置github

    一.事先准备 1.安装Git Git下载: http://git-scm.com/downloads 最新版本是2.1.2 git登陆地址:https://github.com/ 2.注册GitHub ...