1、Logback为取代log4j而生

java日志有:slf4j,log4j,logback,common-logging
slf4j:是规范/接口
日志实现:log4j,logback,common-logging等
Logback是由log4j创始人Ceki Gülcü设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.12</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.7</version></dependency><!--实现slf4j接口并整合--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.7</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-access</artifactId><version>1.1.7</version></dependency>

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

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

  • Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。Logger对象一般多定义为静态常量.
  • Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、 PostreSQL、Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
  • 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具体的显示,即保存这日志信息的地方。

LogBack配置文件:logback.xml

文件存放在resources目录下:

<configuration><!--输出console--><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--输出格式--><encoder><pattern>%d{HH:mm:ss} %-5level [%thread] %logger{36}.%M - %msg%n</pattern></encoder></appender><!--输出到文件--><appender name="MQTTPubFILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><!--消息过滤 debug执行日志,否则抛弃--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY </onMismatch></filter><!--日志输出的文件名,路径项目根目录--><file>mqttPub.log</file><!--时间回滚,当天的记录记录在当天的已时间命名的文件中--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><fileNamePattern>mqttPub.%d{yyyy-MM-dd}.log</fileNamePattern><!-- keep 3 days' worth of history --><maxHistory>3</maxHistory></rollingPolicy><encoder><pattern>%d{HH:mm:ss} %msg%n</pattern></encoder></appender><logger name="类路径" level="debug"><!--指定日志输出方式,引用定义的appender--><appender-ref ref="MQTTSubFILE" /></logger>
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 --><!-- 打印info级别日志及以上级别日志 --><root level="info"><appender-ref ref="STDOUT" /></root>
</configuration>

即当root为info级别时,在代码中通过logger指定的输出级别低于info时,日志是不会输出的.
最终决定你日志输出级别的是你在具体代码中调用Logger类决定的,而不是<logger>标签,但是你的Logger调用级别不能低于标签指定的级别.也意味着如果你的logger标签没有指定级别,那么代码中输出日志时不能低于root标签的级别
root 是日志级别的最高级,如果定义一个logger没有指定level那么模式继承root的级别。同时日志默认会向上传递,即自己定义的logger执行完成后会交给root处理,也就是此时该日志会被处理两次:你自己的日志一次,root处理一次,但可以通过设置additivity属性来避免(默认为true):

 <logger name="logback.LogbackDemo" level="INFO" additivity="false">  <appender-ref ref="STDOUT"/>  </logger>   

LogBack在代码中的使用:

private static final Logger logger = LoggerFactory.getLogger(xxx.class);
logger.debug(xxx);

一篇文章学会日志logback的使用相关推荐

  1. 一篇文章学会写作,自媒体人的必经之路

    自媒体离不开好内容. 能否持续性的创作出好内容是每一个自媒体人绕不过的坎. 今天从图文自媒体分享下写作. 写作应该是花80%的时间思考,花20%的时间把思考的内容写出来. 例如,我要写一篇知乎带货的文 ...

  2. 一篇文章学会Python函数重写,每天进步一个知识点

    函数重写(override) 前提:必须有继承性 原因: 父类中的功能(函数),子类需要用,但是父类中函数的函数体内容和我现在要执行的逻辑还不相符 那么可以将函数名保留(功能还是此功能),但是将函数体 ...

  3. java 最少使用(lru)置换算法_一篇文章学会如何基于LRU-K算法设计本地缓存实现流量削峰...

    专注于Java领域优质技术号,欢迎关注 作者:一个Java菜鸟 1.背景介绍 1.1.现象 QPS突然增长2倍以上(45w~60w每分钟) 将产生下面一些问题: 1)响应接口响应时长增加了5倍(qps ...

  4. 一篇文章学会使用摩斯密码,简单易懂,你也可以使用“降维打击”

    阅读之前,大家请先看一行符号,看看大家能不能猜出这段符号所代表的含义: "--. --- --- -.. .--- --- -..." 相信能看出这段符号含义的人还是占少数,没关系 ...

  5. 一篇文章学会 SVN

    为什么不用 Git 用 SVN?选择哪一个呢 一句话:团队用什么,就选什么 01 简单说说 SVN 首先推荐最好的教程:SVN快速上手教程 1.SVN 是什么? 代码版本管理工具 它能记住你每次的修改 ...

  6. 一篇文章学会springMVC

    更多精彩和干货和你分享 说在前面 本文只是入门 为什么用springMVC?springMVC有什么有缺点?springMVC和Struts有什么区别?等等这些问题可以参考网路上资源,本文的重点是快速 ...

  7. 一篇文章学会使用 nmon

    1.Nmon简介 Nmon (Nigel's Monitor)是由IBM 提供.免费监控 AIX 系统与 Linux 系统资源的工具.该工具可将服务器系统资源耗用情况收集起来并输出一个特定的文件,并可 ...

  8. Nmon是什么,一篇文章学会使用 nmon

    本文摘自:https://www.sohu.com/a/219012698_151779 1.Nmon简介 Nmon (Nigel's Monitor)是由IBM 提供.免费监控 AIX 系统与 Li ...

  9. php写一个shell脚本文件格式,一篇文章学会——shell脚本编写

    用了caffe有一段时间了,感觉自己写shell脚本的能力有待提高,特地从菜鸟笔记处系统的看了一遍,其实学习基础就可,内容也不多,我就不总结了.把网站上的内容用markdown重新编辑了一下,各位可以 ...

最新文章

  1. hdu 1723 DP/递推
  2. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY11-特征选择和稀疏学习
  3. Httpd之检测与安装
  4. 改变UITableView选中行高亮的颜色
  5. 大数据学习(08)--Hadoop中的数据仓库Hive
  6. Java 换行和回车
  7. 不同库表数据库迁移工具_Microsoft提供的数据库迁移助手工具概述
  8. SpringBoot + Eureka启动失败
  9. Mac入门(三)使用brew安装软件
  10. DLAN 连接和使用体验——Twonky
  11. 二维码的应用领域有哪些?
  12. unity 摄像机导入 3dmax 带fov
  13. Python数据类型-list得切片(slices)
  14. WinRAR制作单文件(便携版)
  15. 计算机相关期刊,计算机相关杂志
  16. Linux升级gcc到最新版本gcc-11.2.0
  17. openni2结构简介
  18. linux 创建连接命令 ln -s 软链接
  19. linux+gunzip解压命令,Linux gunzip命令解析 gunzip解压文件的方法
  20. 甲虫之王怀旧服新开的服务器是否自动开门,魔兽世界怀旧服:千人转到未开门服务器,会诞生千只甲虫之王吗?...

热门文章

  1. USB协议学习笔记 - CUSTOM HID 设备
  2. 如何减少APP电量消耗?
  3. ZEGO 2018上海音视频技术嘉年华 活动回顾
  4. linux 添加开机动画,如何更改linux 开机画面?
  5. CSS filter-仿磨砂玻璃效果
  6. 墨水屏(电子纸)刷新模式
  7. Retrofit2网络请求的path部分的“/”斜杠乱码为“百分号2F”,请求结果为400的请求无效
  8. unity3d C#用匿名委托循环注册按钮点击事件报错:索引超界 ArgumentOutOfRangeException: Index was out of range. Must be non-ne
  9. springboot中使用druid查询sqlite报错getFetchDirection error ResultSet closed
  10. Williamnbsp;T.nbsp;Freeman