1. logback的定义

  Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块:
  logback-core:其它两个模块的基础模块
  logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

2. 核心概念

  configuration: logback配置的根元素,所有的配置都基于此元素内

  logger:    日志记录器,命名实体,通过不同命名区分不同的日志记录器,可以传递由 "." 分层的字符串,更加常用的是传递类信息

  appender:    日志输出目的,通过appender指定日志的输出目的和输出方式,可以指定输出到控制台、文件、数据库、远程机器等位置

  encoder:      日志编码,用户将日志事件转化成可读的信息,典型场景是将日志转化成字符串

  layout:    布局,用于指定日志输出的格式,通过一些变量,控制符来控制日志的输出格式

  filter:       过滤器,日志和直接输出控制台的区别就是日志可以控制输出内容和输出内容格式,filiter控制哪些日志应该输出,哪些日志不应该输出

  root:       每个配置文件有且只有一个,用户指定根logger的配置

3. 常用的logback配置项

  configuration

    属性: 

      debug: true / false, 设置true值的时候,第一次启动日志记录的时候,会输出logback的配置信息;

      scan:  true / false, 设置true值的时候,结合 scanPeriods 来设置扫描配置文件的间隔时间

          例如: 30 seconds, 当扫描发现文件发生变动的时候,会将变动应用到下一次的日志记录中;

    子元素:

      logger, appender, layout, filter, root, timestamp等

  logger

    属性:

      name:  string, 指定该logger的名字,通过”."隔开可以制造logger层级关系,例如 x.y 是 x.y.z的父logger,当x.y.z没有配置日志级别的时候,会继承自父logger, 如果additivity没有设置false的话,还会从父logger继承appender

      level:  TRACE/DEBUG/INFO/WARN/ERROR ALL/OFF, 可以指定日志的级别,低级别会承载高级别日志的输出,而高级别的不会,例如 DEBUG中不过滤会默认输出DEBUG及DEBUG以上日志,ERROR只会输出ERROR,不会输出它以下级别的日志

    子元素:

      <appender-ref ref="xxx" /> 指向某个输出附加器

  appender   日志附加器, 指定当前日志输出渠道,可以到控制台、文件,在J2EE应用中,一般是输出到本地机器file

    属性:

      name: string, 当前日志输出附加器的标识,在一个configuration中应该是唯一的

      class: logback提供的输出附加器类型, 输出到控制台、文件、滚动输出到文件、数据库、远程机器等都有对应的appender提供类

    子元素:

      encoder, 指定日志事件对象编码类

      filter,过滤器,过滤 日志是否需要输出

  root  logger的特例,在一个logback上下文中只有一个,就是根记录器,所有的记录器都是该记录器的 子孙记录器,等同于 <logger name="root" > 其他的记录器都是 root.xx.xx.xx

    属性:

      level: 与logger同

    子元素:

      appender: 与logger同

  property  属性值配置

    属性:

      name:属性名称,用于在配置文件中引用,使用${xx} 方式引用

      value:属性值, 占位符的实际代替值

  timestamp  获取时间戳

    属性:

      key:指定的名称,作用同property的key

      datePattern: 时间戳格式化成格式,使用java.text.SimpleDateFormat格式化

4. 常用的appender

  主要类图,引自logback官网(https://logback.qos.ch/manual/appenders.html):

  

ConsoleAppender  控制台输出

  属性名:encoder:日志事件编码,决定如何转换日志事件

      target:可以是System.out, System.err, 默认是System.out

      withJansi: 是否支持ANSI颜色显示日志,会稍微占用多一点磁盘空间, 默认是false

FileAppender    文件输出

   属性:encoder: 同上

      append:true/false, 当检测到设置的文件名存在时候,是否需要追加到文件末尾

          true会追加,false会先将原有文件内容清空,默认是true

      file:  输出的文件路径

      prudent:严谨模式,即使多个jvm同时指定写入该文件,该启动该模式也能安全地写入文件,

           true/false, 默认是false, 实现的原理是利用了排它锁,让其他需要占用资源的线程等待

   写入文件的时候,我们经常需要讲日志每个一个文件的名称都唯一,那么可以使用timeStamp获取时间戳来给文件命名保证唯一,适用于应用经常多次运行的情况,如果需要每日自动分割成日志的话, 可以使用下面的RollingFileAppender。

    FileAppender生成唯一日志文件名配置:

<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- use the previously created timestamp to create a uniquely
named log file -->
<file>log-${bySecond}.txt</file>
<encoder>
<pattern>%logger{35} - %msg%n</pattern>
</encoder>
</appender>

RollingFileAppender   滚动文件输出

  属性:file:  同FileAppender

    append:  同FileAppender

    encoder:  同FileAppender

    prudent:  同FileAppender

    rollingPolicy: 该配置指定当 滚动事件 触发的时候,应该执行哪些操作, 本节后面有详细说明

    triggeringPolicy:   该配置指定何时会触发 滚动时间, 本节后面有详细说明

TimeBasedRollingPolicy    基于时间的滚动行为

  fileNamePattern:  string, 文件命名格式,一般会使用 serverName.%d.log 的形式来按照每天来滚动日志文件,%d默认是 yyyy-MM-dd 格式,按照什么单位滚动,是参照%d格式的,例如 %d{yyyy-MM}会让日志文件按月份滚动,特别的,如果是.gz / .zip 配置该项,那么会将日志文件压缩后保存(深夜进行压缩,如果深夜没有日志工作,一般在00:23 47' 进行)

  maxHistory:    int,最大日志保留单位,如果 fileNamePattern 配置按照天滚动,这个的单位是天, 如果是月,那这里单位是月,依次类推

  totalSizeCap:    int,需要maxHistory有配置,配置最大的日志保存量, 例如 5M, 2G 的配置

  cleanHistoryOnStart: boolean, 是否在启动的时候清理历史日志,默认是false

  样例配置:  

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

Size and time based rolling policy  基于时间和大小的滚动行为

  这个触发行为和  TimeBasedRollingPolicy 有点像,但是他的属性  fileNamePattern 强制两个参数 %d 和 %i ,多了一个配置参数:maxFileSize, 所以他的配置文件看起来像是这样:

 <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>mylog.txt</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>

  当时间条件未达到,但是单文件最大大小已经达到的时候,会自动讲%i 从 0 开始叠加滚动,它产生的日志可能是 mylog-2018-08-19-0.txt, mylog-2018-08-19-1.txt, mylog-2018-08-19-2.txt 这样子,其他的和 TimeBasedRollingPolicy 一致;

FixedWindowRollingPolicy  滚动窗口输出

  该输出需要和滚动触发配合使用, 属性有:minIndex, maxIndex, fileNamePattern,fileNamePattern需要带上 %i 参数,使得可以生成唯一的文件名, 当达到maxIndex上限之后,文件不会再发生滚动,会一直写入基础日志文件中,它的配置文件看起来就像这样:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>

SizeBasedTriggeringPolicy  基于文件大小的触发滚动

  属性:maxFileSize:最大文件大小,当日志文件达到该大小后,就会触发滚动事件;

(后续更新)

5. Encoders

6. Layouts

7. Filters

  

  

  

logback基本入门的更多相关文章

  1. Logback 快速入门 / 使用详解

    官方文档: http://logback.qos.ch/manual/index.html 一.简介 Java 开源日志框架,以继承改善 log4j 为目的而生,是 log4j 创始人 Ceki Gü ...

  2. logback日志入门超级详细讲解

    基本信息 日志:就是能够准确无误地把系统在运行状态中所发生的情况描述出来(连接超时.用户操作.异常抛出等等): 日志框架:就是集成能够将日志信息统一规范后输出的工具包. Logback优势 Logba ...

  3. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

  4. SpringBoot入门教程(八)配置logback日志

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

  5. Logback 入门和配置说明

    Logback 是 Log4j 的改进版本,而且原生支持 SLF4J,Logback 的初始化步骤如下: 在类路径中查找 logback-test.xml 配置文件 在类路径中查找 logback.g ...

  6. (入门SpringBoot)SpringBoot结合logback(六)

    SpringBoot结合logback日志: 1.配置资源文件: #日志配置信息logbacklogging.config=classpath:logback-spring.xmllog.path=E ...

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战

    笔记 2.SpringBoot2.x日志讲解和自定义Logback配置实战     简介:讲解SpringBoot2.x整合Logback配置实战 1.官网介绍:https://docs.spring ...

  8. 【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)

    技术介绍 什么是 logback? Logback为取代 log4j 而生.Logback 由 log4j 的创立者 Ceki Gülcü设计.以十多年设计工业级记录系统的经验为基础,所创建的logb ...

  9. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

随机推荐

  1. Matplotlib常用绘图示例

    一.Matplotlib介绍 Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过Matplotlib,开发者可以仅需要几行代码,便可 ...

  2. Android之activity总结

    http://www.cnblogs.com/lyp3314/archive/2011/11/10/2244971.html 一.什么是activity Activity 是用户接口程序,原则上它会提 ...

  3. jquery $("[id$='d']").val();这句话什么意思?

    获得id后缀为d字符的值.应该是属于input标签.谢谢 匹配给定的属性是以某些值结尾的元素,比如<span id="ad">test</span>< ...

  4. Burp - Attack type

    有时间不用难免忘记,做个总结 1. Sniper (狙击手) 它使用一组Payload集合,依次替换Payload位置上(一次攻击只能使用一个Payload位置)被§标志的文本(而没有被§标志的文本将 ...

  5. unhandled exception(没有处理异常)

    背景 今天在代码中抛出了Exception类, 但是出现了代码报错 意思是,未处理异常 原因 因为Exception是check异常,也就是必须在代码层面直接捕获处理的,这类异常有IOExceptio ...

  6. python Polygon模块安装

    pip install Polygon这样会安装不了 只能使用pip install Polygon2 或者 pip install Polygon3,也就是必须带版本号

  7. PAT A1122 Hamiltonian Cycle (25 分)——图遍历

    The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a gra ...

  8. kubernetes 持久化部署lamp类型网站

    1.构建mariadb的镜像 cat Dockerfile FROM mariadb:latest ADD twocloud_kk.sql /docker-entrypoint-initdb.d #C ...

  9. 一篇自己都看不懂的CDQ分治&整体二分学习笔记

    作为一个永不咕咕咕的博主,我来更笔记辣qaq CDQ分治 CDQ分治的思想还是比较简单的.它的基本流程是: \(1.\)将所有修改操作和查询操作按照时间顺序并在一起,形成一段序列.显然,会影响查询操作 ...

  10. 学习Angularjs向数据库添加数据

    今天学习angularjs向数据库添加数据. 学习此篇,得从以往几篇开始,因为那还有创建数据表等演示. 现在来创建一个添加的存储过程: SET ANSI_NULLS ON GO SET QUOTED_ ...