文档章节

Logback 简明使用手册

小灰灰Blog
 小灰灰Blog
发布于 2016/04/02 21:03
字数 1980
阅读 659
收藏 10

主要内容

  1. 跑起来
  2. 配置项
  3. 工作原理

1. 统一日志输出

巴拉巴拉。。。 (为什么这么玩,有什么好处 google it)

说明: 本篇主要偏应用为主,介绍了如何使用logback, 以及相关的配置,对于这个东西的实现原理以及工作机制,没有涉入; 此外大部分内容来源于互联网,博客,这里只是给了一个梳理和小结,方便一键式接入

官方文档 http://logback.qos.ch/manual/index.html

2. 跑起来

基本配置

maven依赖:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>

代码中使用方式

package com.mushroom.hui;

public class LogTest {
  private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory(LogTest.class);
  
  @Test 
  public void logTest() {
    logger.info("hello wolrd! This is in method {}, print by {}", "logTest", "yihui");
  }
}

完成上面的这些,测试一下,发现控制台没有任何输出,因为缺了配置文件

配置文件在log4j里通常叫做log4j.xml,在logback里是logback.xml,或者,在测试环境里叫做logback-test.xml。

在Maven project里,logback.xml文件必须放在$PROJECT_HOME/src/main/resources目录中。logback-test.xml文件必须放在$PROJECT_HOME/src/test/resources目录中

ok,在测试工程中添加一个 logback-test.xml 配置文件:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
           ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

顺带提一句,xml加载顺序是: logback.groovy -> logback.xml -> logback-test.xml -> default(默认)

3. 配置文件怎么玩

上面就有一个简单的配置文件,首先对出现的几个节点(<节点>)进行说明

a. configuration

从这霸气的名字可以看出,这货就是根节点,定义一些配置相关信息

scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

<!-- 部署出logback内部日志信息,每隔60s判断一下配置文件有没有个更新,若更新,则重新加载 -->
<configuration debug="false" scan="true" scanPeriod="60 seconds">

b.上下文 contextName

每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。

c.设置变量 property

用来定义变量值的标签,<property> 有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使${}来使用变量。

<configuration>
    <property name="CONTEXT_NAME" value="test"/>
    <contextName> ${CONTEXT_NAME} </contextName>
</configuration>

d.获取时间戳字符串:<timestamp>

两个属性 key:标识此<timestamp>的名字;datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式

<configuration scan="true" scanPeriod="60 seconds" debug="false">  
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>   
      <contextName>${bySecond}</contextName>  
      <!-- 其他配置省略-->  
</configuration>   

设置logger:

下面一大串文字的描述(网上copy来),简单来说loger就是指定类or包的输出级别

<level> 指定打印级别

<name>指定包名or类名,或一个固定的约束条件

<logger> 用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender><logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性。

name: 用来指定受此loger约束的某一个包或者具体的某一个类。

level: 用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前loger将会继承上级的级别。

addtivity: 是否向上级loger传递打印信息。默认是true。 <loger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

<root>

也是<logger>元素,但是它是根loger。只有一个level属性,应为已经被命名为"root".

level: 默认是DEBUG。

<root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger。

如上面的java文件对应的配置可以是下面的:

<logger name="com.mushroom.hui" level="INFO" />

<!--如果上面的JAVA中的logger获取是:  -->
<!-- Logger logger = LoggerFactor.getLogger("logTest")-->
<logger name="logTest" level="DEBUG" />

e. append

上面的logger有一个 <append-ref> 的东西,从名字很容易看出就是一个引用 <append>

<appender><configuration>的子节点,是负责写日志的组件。

两个必要属性name和class。name指定appender名称,class指定appender的全限定名。

下面是一个每天生成一个文件,保存30天的配置项

<configuration>   
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">   
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">   
      <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>   
      <maxHistory>30</maxHistory>    
    </rollingPolicy>   
    
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">   
      <maxFileSize>5MB</maxFileSize>  <!-- 当文件大于5MB时,分拆一下日志文件-->
    </triggeringPolicy>   
   
    <encoder>   
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
    </encoder>   
  </appender>    
   
  <root level="DEBUG">   
    <appender-ref ref="FILE" />   
  </root>   
</configuration>  
  1. append的两个属性
  • name: append的标识,logger或者root中使用 <append-ref> 指定的ref值
  • class: 有三种,ConsoleAppender(输出到控制台),FileAppender(输出到文件), RollingFileAppender(先将日志输出到指定文件,满足一定条件后将日志记录到其他文件中)
  1. ConsoleAppender & FileAppender

这两个都比较简单,直接上代码说明

<configuration>  

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

<logger name="test" level="DEBUG" />

 <appender name="FILE" class="ch.qos.logback.core.FileAppender">  
  <file>testFile.log</file>  <!-- 文件名,这里是相对路径,也可以指定绝对路径 -->
  <append>true</append>  <!-- true 表示追加写方式,默认就是true,因此这个常省略 -->
  <encoder>  
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>  
  </encoder>  
</appender>  

<root level="INFO">  
  <appender-ref ref="FILE" />  
</root>  
</configuration> 
  1. RollingFileAppender 滚动记录文件

如上面的每天记录一个日志文件,并保存30天,就是用搞这个模式来玩的,对比上面的两个xml(主要看fileAppender与rollingFileAppender)

RollingPolicy 这个是主要关注点,用来指定滚动策略的

- TimeBasedRollingPolicy:根据时间来滚动,最常见的一种

    fileNamePattern: 文件名
    maxHistory: 最多保存的时间

- FixedWindowRollingPolicy: 根据固定窗口算法重命名文件的滚动策略

triggeringPolicy 根据文件大小进行拆日志文件,当大于指定的文件时

SizeBasedTriggeringPolicy: 查看当前活动文件的大小,如果超过指定大小会告知      RollingFileAppender 触发当前活动文件滚动。只有一个节点:
`<maxFileSize>`:这是活动文件的大小,默认值是10MB。

f. filter 过滤

配合appender使用,过滤日志

过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志将立即被抛弃不再经过其他过滤器;返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;返回ACCEPT,日志会被立即处理,不再经过剩余过滤器。

  1. Level 级别过滤器

级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。有以下子节点:

<level>:设置过滤级别 <onMatch>:用于配置符合过滤条件的操作 <onMismatch>:用于配置不符合过滤条件的操作

  1. ThresholdFilter: 临界值过滤器,

过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝

<level>:设置过滤级别

  1. EvaluatorFilter: 求值过滤器,评估、鉴别日志是否符合指定条件

不常用,有兴趣官网走起

© 著作权归作者所有

下一篇: Java 并发排序
小灰灰Blog
粉丝 199
博文 210
码字总数 377199
作品 0
武汉
程序员
私信 提问
180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 配置文件即可,那么在SpringBoot中可以怎么做? I. 配置说明...

小灰灰Blog
2018/06/23
0
0
SpringBoot基础篇日志管理之logback配置文件

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 SpringBoot默认选用logback进行日志管理,前一篇讲述了默认配置日志的参数,然而这些内容比较初级,并不一定能满足我们更加特殊的需求(比如...

小灰灰Blog
2018/10/14
0
0
Jinja2 简明使用手册

介绍 Jinja是基于python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity。 运行需求 Jinja2需要Python2.4以上的版本。 安装 按照Jinja有多种方式,你可以根据需要选择...

小编辑
2010/02/03
49K
5
Jinja2 简明使用手册

介绍 Jinja是基于Python的模板引擎,功能比较类似于于PHP的smarty,J2ee的Freemarker和velocity。 运行需求 Jinja2需要Python2.4以上的版本。 安装 按照Jinja有多种方式,你可以根据需要选择...

sjfbjs
2017/08/08
0
0
p6spy使用logback作为日志系统

受够了ibatis自带sql语句的日志输出,一坨的问号,直接copy出来,还不能运行,要手工替换每个问号为对应的参数。依照google法则,嗯,发现一个可以自动将sql的问号替换为实际参数并进行日志输...

LeeKiven
2015/12/23
348
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux scp命令

Linux scp命令 Linux 命令大全 Linux scp命令用于Linux之间复制文件和目录。 scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。 语法 scp [-1246BCpqrv] ...

linjin200
21分钟前
3
0
Echoin获得ZB Captial战略投资

Echoin获得ZB Captial战略投资

怎当她临去时秋波那一转
22分钟前
2
0
Jenkins 持续集成综合实战

Jenkins 持续集成综合实战 发表于 2017-01-06 文章目录 1 安装 Jenkins 1.1 安装 JDK/Maven 1.2 安装 Jenkins 1.2.1 离线安装 1.2.2 在线安装 1.2.3 基于 Tomcat 安装 1.2.4 免安装方式 1.3 ...

linzhuangrong
23分钟前
2
0
自动编码(AE)器的简单实现

一.目录 自动编码(AE)器的简单实现 一.目录 二.自动编码器的发展简述 2.1 自动编码器(Auto-Encoders,AE) 2.2 降噪自编码(Denoising Auto-Encoders, DAE)(2008) 2.3 堆叠降燥自动编码器 (Sta...

zhaowei121
27分钟前
2
0
十分良心!全网最详细的Java 自动内存管理机制及性能优化教程

先来个思维导图预览一下本文结构。 一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《J...

戎码益深
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部