Logback介绍

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

Logback的优点

  1. 执行速度快,初始化内存加载小;
  2. 原生实现了 SLF4J API,不需要进行转换;
  3. 配置简单,并可以适应多种环境;
  4. 可以定时的删除过期日志;
  5. 更为强大的过滤器,不必因更改日志级别而产生大量的日志;
  6. 可以从 IO 错误中进行恢复;
  7. ....

    关于logback的优点还有很多,这里我就不一一列举了。详细的可以查看官方的Api文档。

    地址:https://logback.qos.ch/documentation.html

Logback的配置说明

关于这块的配置说明,我就简单的列举一些比较常用配置来进行说明。如果还想了解更多,请看官方的文档说明。

Logback的层级说明

简单的层级结构,实际有更多,仅供参考。

  1. configuration
  2. root
  3. logger
  4. property
  5. appender
  6. layout
  7. rollingPolicy
  8. Pattern
  9. fileNamePattern
  10. maxFileSize
  11. maxHistory
  12. totalSizeCap

具体说明

configuration 根节点, 一般有三个属性,分别是scan、scanPeriod和debug。

  • scan:是否自动加载,默认为true。
  • scanPeriod:监听修改时间间隔,默认一分钟。
  • debug: 是否查看logback运行状态,默认true。

那么我们要使用这个的话,可以进行如下配置:

  1. <configuration scan="true" scanPeriod="30 seconds" debug="true">
  2. ...
  3. </configuration>

root 和logger 子节点,用于指定输入的日志级别。

  • root :这个是指定主日志的级别。
  • logger :这个是指定自定义日志的级别。

说明:root 指定的日志级别就是用类进行输出的日志,例如:

  1. private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);

logger 指定的日志级别是自定义的级别,例如:

  1. private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");

他们的用法如下:

  1. <logger name="oneInfo" level="DEBUG" additivity="false">
  2. <appender-ref ref="ONE_INFO" />
  3. </logger>
  4. <root level="INFO">
  5. <appender-ref ref="STDOUT"/>
  6. <appender-ref ref="FILE" />
  7. </root>

说明二: level 是日志输出的级别,additivity表示是否在控制台打印该日志。

property 子节点,一般用来定义变量值。有两个属性name和value。类似Java中Map的key和value。

  • name: 变量的名称
  • value: 变量的值

用法如下:

  1. <property name="LOG_HOME" value="logs/pcm"/>

说明:value指定的文件路径,会在项目同级目录下自动生成,无需手动创建。

appender 子节点,负责写日志的组件。有两个属性,name和class。

  • name: 自定义名称。
  • class:对应自定义名称的全限定名,就是使用何种方式进行日志的输出。

这个非常重要,也可以说是logback的核心吧。简单的用法如下:

  1. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  2. </appender>

说明:定义一个STDOUT名称,在控制台进行输出。

layout和Pattern 这两个一般是一起使用的。

  • layout:格式化日志信息;
  • Pattern :layout 子节点,定义输出信息的格式;

简单的用法如下:

  1. <layout class="ch.qos.logback.classic.PatternLayout">
  2. <Pattern>
  3. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
  4. </Pattern>
  5. </layout>

说明:Pattern里面格式的%d表示输出的时间格式,%thread 表示输出的线程名称,%-5level 表示字符宽度,%msg 表示输出的信息,%n表示换行。

rollingPolicy、fileNamePattern、maxFileSize、 maxHistory和totalSizeCap 这些一般用于对日志进行滚动,也就是日志切割管理之类的。

  • rollingPolicy: 决定日志滚动行为,一般用于日志切割。
  • fileNamePattern:必要的节点,一般用于指定日志的文件的路径以及生成格式。
  • maxFileSize:单个日志文件最大值,达到之后就进行切割。
  • maxHistory:日志文件最多保留的天数,也就是过期时间。
  • totalSizeCap : 日志文件总体的最大值,达到之后就不再产生日志。

简单的用法如下:

  1. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  3. <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
  4. <maxFileSize>10MB</maxFileSize>
  5. <maxHistory>31</maxHistory>
  6. <totalSizeCap>10GB</totalSizeCap>
  7. </rollingPolicy>
  8. </appender>

说明:这段的配置意义是,每天产生一个日志文件,如果超出了10M,日志就进行切割,并且在日志文件名称上加一,日志文件最多保持31天,日志文件总共最大为10G。

Logback使用说明

在对logback日志的配置文件进行了简单的说明之后,那我们来简单的使用logback吧。

logback.xml 使用需要依赖三个 jar 包,分别是 slf4j-api,logback-core,logback-classic。

mavan配置如下:

  1. <dependency>
  2. <groupId>org.slf4j</groupId>
  3. <artifactId>slf4j-api</artifactId>
  4. <version>1.7.25</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>ch.qos.logback</groupId>
  8. <artifactId>logback-classic</artifactId>
  9. <version>1.2.3</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>ch.qos.logback</groupId>
  13. <artifactId>logback-core</artifactId>
  14. <version>1.2.3</version>
  15. </dependency>

成功在maven添加依赖包之后,我们写个简单的demo来测试下吧。

定义三个log日志,一个主log,两个自定义log。

整体配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="30 seconds" debug="true">
  3. <property name="LOG_HOME" value="logs/pcm"/>
  4. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  5. <layout class="ch.qos.logback.classic.PatternLayout">
  6. <Pattern>
  7. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
  8. </Pattern>
  9. </layout>
  10. </appender>
  11. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  12. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  13. <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
  14. <maxFileSize>10MB</maxFileSize>
  15. <maxHistory>31</maxHistory>
  16. <totalSizeCap>10GB</totalSizeCap>
  17. </rollingPolicy>
  18. <layout class="ch.qos.logback.classic.PatternLayout">
  19. <Pattern>
  20. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
  21. </Pattern>
  22. </layout>
  23. </appender>
  24. <appender name="ONE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  25. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  26. <!-- rollover daily -->
  27. <fileNamePattern>${LOG_HOME}/oneInfo/%d{yyyy-MM-dd}/oneInfo.%i.txt</fileNamePattern>
  28. <maxFileSize>10MB</maxFileSize>
  29. <maxHistory>31</maxHistory>
  30. <totalSizeCap>10GB</totalSizeCap>
  31. </rollingPolicy>
  32. <layout class="ch.qos.logback.classic.PatternLayout">
  33. <Pattern>
  34. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
  35. </Pattern>
  36. </layout>
  37. </appender>
  38. <appender name="TWO_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
  39. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  40. <!-- rollover daily -->
  41. <fileNamePattern>${LOG_HOME}/twoInfo/%d{yyyy-MM-dd}/twoInfo.%i.txt</fileNamePattern>
  42. <maxFileSize>10MB</maxFileSize>
  43. <maxHistory>31</maxHistory>
  44. <totalSizeCap>10GB</totalSizeCap>
  45. </rollingPolicy>
  46. <layout class="ch.qos.logback.classic.PatternLayout">
  47. <Pattern>
  48. %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
  49. </Pattern>
  50. </layout>
  51. </appender>
  52. <logger name="oneInfo" level="DEBUG" additivity="false">
  53. <appender-ref ref="ONE_INFO" />
  54. </logger>
  55. <logger name="twoInfo" level="WARN" additivity="true">
  56. <appender-ref ref="TWO_INFO" />
  57. </logger>
  58. <root level="INFO">
  59. <appender-ref ref="STDOUT"/>
  60. <appender-ref ref="FILE" />
  61. </root>
  62. </configuration>

然后分别在控制台输出和文件中进行输出。

该java的代码示例如下:

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. /**
  4. *
  5. * Title: logbackTest
  6. * Description:
  7. * logback日志测试
  8. * Version:1.0.0
  9. * @author pancm
  10. * @date 2018年1月24日
  11. */
  12. public class logbackTest {
  13. private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
  14. private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
  15. private static Logger LOG3 = LoggerFactory.getLogger("twoInfo");
  16. public static void main(String[] args) {
  17. test();
  18. }
  19. private static void test(){
  20. LOG.debug("主程序的debug");
  21. LOG.info("主程序的info");
  22. LOG.warn("主程序的warn");
  23. LOG.error("主程序的error");
  24. LOG2.debug("oneInfo的debug");
  25. LOG2.info("oneInfo的info");
  26. LOG2.warn("oneInfo的warn");
  27. LOG2.error("oneInfo的error");
  28. LOG3.debug("twoInfo的debug");
  29. LOG3.info("twoInfo的info");
  30. LOG3.warn("twoInfo的warn");
  31. LOG3.error("twoInfo的error");
  32. }

输出结果如下:

日志的生成目录:

输出结果的说明:

  • LOG: 因为设置打印的级别是info,所以debug级别的不会打印 。
  • LOG2: 因为自定义配置设定的是 additivity="false" 不在控制台打印。 所以一条都不会打印,但是debug级别以上的日志可以在logs/pcm/oneInfo中查看。
  • LOG3: 因为自定义配置设定的是 additivity="true" 可以在控制台打印。所以会打印两条warn级别的日志,日志也可以在logs/pcm/oneInfo中查看。

其它

参考:

https://logback.qos.ch/documentation.html

https://www.cnblogs.com/warking/p/5710303.html

到此,本文的logback日志简单讲解结束,谢谢阅读!

Logback日志配置的简单使用的更多相关文章

  1. logback日志配置

    第一步:加入jar包.要加入slf4j和logback的jar包,slf4j需要的jar包为slf4j-api,logback需要2个jar包(logback-classic.logback-core ...

  2. Spring Boot Logback日志配置

    logback的使用: Logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurat ...

  3. SpringBoot整合+logback日志配置

    本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...

  4. SpringBoot Logback日志配置

    Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...

  5. springboot学习笔记:4.logback日志配置

    springboot中日志组件推荐使用logback: 由于springboot内置了logback,所以可以直接在application.properties中配置:如果要功能丰富些,则配置下log ...

  6. SpringBoot Logback 日志配置

    目录 前言 日志格式 日志输出 日志轮替 日志级别 日志分组 小结 前言 之前使用 SpringBoot 的时候,总是习惯于将日志框架切换为 Log4j2,可能是觉得比较靠谱,也可能年龄大了比较排斥新 ...

  7. logback日志框架的简单使用

    1.首先在maven中增加依赖 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>l ...

  8. python - django (logging 日志配置和简单使用)

    1. settings 配置 # 配置日志 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 's ...

  9. Logback日志基础配置以及自定义配置

    Logback日志基础配置 logback日志配置有很多介绍,但是有几个非常基础的,容易忽略的.下面是最简单的一个配置,注意加粗的描述 <?xml version="1.0" ...

随机推荐

  1. centos 7 部署 open-falcon 0.2.0

    =============================================== 2017/12/06_第2次修改                       ccb_warlock 更 ...

  2. Unable to make the module: related gradle configuration was not found. Please, re-import the Gradle project and try again

    到stack overflow找到的答案,老外还是专业 I also had a similar problem, Go to : View -> Tool Windows -> Grad ...

  3. SpiderMonkey js引擎的静态编译与使用

    原文出处: http://yaolixing.oltag.com/gns-8ABFFE2D-EB1E-44FA-9118-217ED7959536.html 几百KB的跨平台js引擎,是不是您心之所想 ...

  4. robotframework的学习笔记(十四)------学习Robot Framework必须掌握的库—-BuiltIn库

    作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...

  5. Linux上安装Redis

    很多编程的小朋友一提到Linux脑袋就大了,我也一样,我是一个大专的学生,没有学过Linux,感觉自己欠缺很多,也知道了人和人之间的差距,当你真正的走上社会,才知道社会是什么,才知道没有学历找工作有多 ...

  6. 基于web的网上书城系统开发-----需求分析

    网上书店管理系统主要针对中小型书店,图书管理员将图书信息整理归类发布到网上.,用户登录该网站后进行浏览图书信息.购买等活动. 前台客户输入的数据交给后台数据库处理并及时反馈给双方.客户和管理者拥有相应 ...

  7. 《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)

    第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Ope ...

  8. input 光标在 chrome下不兼容 解决方案

    input 光标在 chrome下不兼容 解决方案 height: 52px; line-height: normal; line-height:52px\9 .list li input[type= ...

  9. Java学习笔记6---字符串比较方法compareTo(String str)

    方法原型为int compareTo(String str),返回值为int型,参数为字符串类型. 下面是简单示例: /* * compareTo()返回参与比较的两个字符串的ascii码差值 * O ...

  10. python的运维交流学习笔记

    #!/usr/bin/env | #!/usr/bin/python#coding:gbk #python 运维练习 #需求: #1.利用python实现自动监控服务器性能 #2.并将监控到的数据进行 ...