Logback 入门和配置说明
Logback 是 Log4j 的改进版本,而且原生支持 SLF4J,Logback 的初始化步骤如下:
- 在类路径中查找 logback-test.xml 配置文件
- 在类路径中查找 logback.groovy 配置文件
- 在类路径中查找 logback.xml 配置文件
- 如果都没有找到,那边就是用默认配置,将日志输出到控制台
maven 依赖
在使用 logback 之前,需要增加相关依赖,slf4j-api 是 slf4j 的核心,定义了简单统一的接口,logback-classic 则是具体的日志实现。
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
日志示例
- 自动日志配置
配置最简单的方法就是使用 logback 的默认配置,默认配置是将日志输出到控制台,代码如下:
package org.lixue.slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld{
final static Loggerlogger=LoggerFactory.getLogger(HelloWorld.class);
public static void main(String[]args){
logger.info("HelloWorld");
}
}
- 使用 logback-test.xml 或 logback.xml 自动配置
在类路径中,创建 logback-test.xml 或 logback.xml 配置文件,并增加配置如下,该配置等价与自动配置:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoderbydefault-->
<encoder>
<pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>
</encoder>
</appender>
<rootlevel="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
配置文件说明
logback 配置文件的语法非常灵活。因此, 不可能用 DTD 文件或 XML 架构指定允许的语法。不过, 配置文件的基本结构可以描述为 configuration 元素,包含零个或多个 appender 元素,后跟零个或多个 logger 元素,,后跟最多一个 root 元素。下图说明了此基本结构。

- configuration 配置
该配置是配置文件的根节点,主要用于配置文件的读取及调试相关配置,配置如下:
<configuration scan="true"scanPeriod="60 seconds"debug="false">
<!--其他配置省略-->
</configuration>
|
配置属性 |
默认值 |
说明 |
|
scan |
true |
配置文件如果发生改变,将会被重新加载 |
|
scanPeriod |
60000 |
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒 |
|
debug |
false |
将打印出logback内部日志信息,实时查看logback运行状态 |
- logger 配置
用来设置某一个包或者具体的某一个类的日志打印级别,还可以包括零个或多个 appender 子元素,配置如下:
<logger name="org.lixue.slf4j" level="info" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
|
配置属性 |
默认值 |
说明 |
|
name |
某一个包或者具体的某一个类的名称 |
|
|
level |
设置日志打印级别,可用值(不区分大小写) TRACE, DEBUG, INFO, WARN, ERROR, ALL |
|
|
additivity |
true |
是否向上级传递打印消息,如果为 true,则会打印多条日志 |
|
appender-ref |
定义日志打印的 appender |
- root 配置
和 logger 配置一样,是根 logger,所有没有指定的 logger 都将使用 root 配置,配置如下:
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
|
配置属性 |
默认值 |
说明 |
|
level |
设置日志打印级别,可用值(不区分大小写) TRACE, DEBUG, INFO, WARN, ERROR, ALL |
|
|
appender-ref |
定义日志打印的 appender |
- appender 配置
appender 配置有二个必须属性 name 和 class ,这个 name 属性用来标识 appender ,class 属性用于指定 appender 具体实现类的完整名称。这个 <appender> 元素可以包含零个或一个 <layout>元素,零个或多个 <encoder> 元素,零个或多个 <filter> 元素,下图说明了基本结构:

<layout> 元素必须属性为 class , 指定要实例化的布局类的完全名称。<encoder> 元素必须属性为 class,指定要实例化的编码类的完全名称,appender 的继承关系如下:

- ConsoleAppender
用于将日志打印到控制台输出,或者 System.out 或者 System.err 中输出日志
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
- FileAppender
FileAppender 是 OutputStreamAppender 的子类,它将日志事件追加到文件中,目标文件由<file> 指定。如果文件已经存在, 则根据<append> 属性的值追加或截断它。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<!--encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoderbydefault-->
<encoder>
<pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>
</encoder>
</appender>
|
配置属性 |
默认值 |
说明 |
|
file |
要写入的文件的名称。如果文件不存在, 则创建它,如果文件的父目录不存在,,FileAppender 将自动创建它,,包括任何必要但不存在的父目录 |
|
|
append |
true |
如果为 true, 则会在现有文件的末尾追加事件。否则, 如果追加为 false, 则任何现有文件都将被截断 |
|
immediateFlush |
true |
为 true 表示所有消息都会被立即输出,设为false则不输出 |
- RollingFileAppender
RollingFileAppender 扩展了滚动日志文件的功能。例如, 可以记录到名为 log.txt 文件, 并且一旦满足某个条件,将其日志记录目标更改为另一个文件。有两个重要的子组件与 RollingFileAppender 交互。第一个 RollingFileAppender 子组件,即 RollingPolicy 负责执行翻转所需的操作。RollingFileAppender 的第二个子组件, 即 TriggeringPolicy 将确定翻转发生的时间和准确情况。
<appende rname="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>e:/temp/logs/logFile.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<rollingPolicy class="">
<!--其他配置-->
</rollingPolicy>
<triggeringPolicy class="">
<!--其他配置-->
</triggeringPolicy>
<encoder>
<pattern>%-4relative[%thread]%-5level%logger{35}-%msg%n</pattern>
</encoder>
</appender>
|
配置属性 |
默认值 |
说明 |
|
file |
要写入的文件的名称。如果文件不存在, 则创建它,如果文件的父目录不存在,,FileAppender 将自动创建它,,包括任何必要但不存在的父目录 |
|
|
append |
true |
如果为 true, 则会在现有文件的末尾追加事件。否则, 如果追加为 false, 则任何现有文件都将被截断 |
|
immediateFlush |
true |
为 true 表示所有消息都会被立即输出,设为false则不输出 |
|
rollingPolicy |
负责执行翻转所需的操作 |
|
|
triggeringPolicy |
确定翻转发生的时间和准确情况 |
- RollingPolicy
- TimeBasedRollingPolicy
可能是最受欢迎的滚动策略。具体实现类为 ch.qos.logback.core.rolling.TimeBasedRollingPolicy, 它根据时间 (例如按天或按月) 定义翻转策略,TimeBasedTriggeringPolicy 实现了 RollingPolicy 和 TriggeringPolicy 接口。
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
|
配置属性 |
默认值 |
说明 |
|
fileNamePattern |
定义了已滚动 (存档) 日志文件的名称,其值应由文件的名称以及适当放置的%d{yyyy-MM-dd}转换说明符组成。%d转换说明符可能包含由类指定的日期和时间模式(使用 java.text.SimpleDateFormat);如果配置了 <file> 元素值,则该配置不生效;如果希望启用压缩,则只需要修改 fileNamePattern 以 .gz 或 .zip 结尾。 |
|
|
maxHistory |
保留的最大存档文件数, 异步删除旧文件。例如, 如果指定每月翻转, 并将 maxHistory 设置为 6, 则6月的存档文件将保存在删除了6月以上的文件中。注意当删除旧的存档日志文件时, 为日志文件存档而创建的任何文件夹都将删除 |
|
|
totalSizeCap |
控制所有存档文件的总大小。超过了总大小上限时, 将异步删除最旧的存档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第一限制,而 totalSizeCap 为第二限制 |
|
|
cleanHistoryOnStart |
false |
如果设置为 true,,将在 appender 启动时执行存档删除 |
- SizeAndTimeBasedRollingPolicy
您可能希望将文件实质上按日期存档,但同时限制每个日志文件的大小,特别是在后期处理工具对日志文件施加大小限制时。该滚动策略就是为了满足这一要求而实现的,具体实现类为 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy 。
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>e:/temp/logs/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
|
配置属性 |
默认值 |
说明 |
|
fileNamePattern |
定义了已滚动 (存档) 日志文件的名称,其值应由文件的名称以及适当放置的%d{yyyy-MM-dd}转换说明符和 %i 组成。%d转换说明符可能包含由类指定的日期和时间模式(使用 java.text.SimpleDateFormat);%i 转换说明符是递增的索引 (从0开始);如果希望启用压缩,则只需要修改 fileNamePattern 以 .gz 或 .zip 结尾; |
|
|
maxHistory |
保留的最大存档文件数, 异步删除旧文件。例如, 如果指定每月翻转, 并将 maxHistory 设置为 6, 则6月的存档文件将保存在删除了6月以上的文件中。注意当删除旧的存档日志文件时, 为日志文件存档而创建的任何文件夹都将删除 |
|
|
totalSizeCap |
控制所有存档文件的总大小。超过了总大小上限时, 将异步删除最旧的存档。totalSizeCap属性还需要设置 maxHistory 属性,maxHistory 为第一限制,而 totalSizeCap 为第二限制 |
- FixedWindowRollingPolicy
您可能希望将文件在固定范围索引内滚动,该滚动策略就是为了满足这一要求而实现的,具体实现类为 ch.qos.logback.core.rolling.FixedWindowRollingPolicy ,由于该策略没有定义翻转发生的时间和准确情况,因此还需要配置 triggeringPolicy 来定义翻转发生的时间和准确情况。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>e:/temp/logs/fixedRollingPolicy.%i.log.zip</fileNamePattern>
</minIndex>
</maxIndex>
</rollingPolicy>
|
配置属性 |
默认值 |
说明 |
|
fileNamePattern |
选项表示在重命名日志文件时将遵循的模式。它必须包含字符串 %i,它将指示将插入当前窗口索引的值的位置 |
|
|
minIndex |
表示索引的下限 |
|
|
maxIndex |
表示索引的上界 |
示例:固定翻转策略的一个更具体的例子。假设,minIndex设置为1, maxIndex设置为 3, fileNamePattern属性设置为 foo%i. log, 并且文件属性设置为 foo.log
|
翻转次数 |
主动输出目标 |
存档的日志文件 |
描述 |
|
foo.log |
- |
尚未发生翻转, logback 登录到初始文件。 |
|
|
foo.log |
foo1.log |
第一次翻转。foo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。 |
|
|
foo.log |
foo1.log, foo2.log |
第二次翻转。foo1.log被重命名为foo2.log。foo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。 |
|
|
foo.log |
foo1.log, foo2.log, foo3.log |
第三次翻转。foo2.log被重命名为foo3.log。foo1.log被重命名为foo2.log。foo.log被重命名为foo1.log。创建一个新的foo.log文件, 并成为活动输出目标。 |
|
|
foo.log |
foo1.log, foo2.log, foo3.log |
在此和随后的几轮中, 翻转将首先删除foo3.log。其他文件通过递增索引来重命名, 如前面的步骤所示。在此和随后的翻转中, 将有三个存档日志和一个活动日志文件。 |
- TriggeringPolicy
- SizeBasedTriggeringPolicy
查看当前活动文件的大小。如果文件超出指定的大小, 它将发出信号, 表示拥有的触发器会触发现有活动文件的翻转,具体实现类为 ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy
<triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
|
配置属性 |
默认值 |
说明 |
|
maxFileSize |
10M |
设置文件翻转的文件大小。通过使用KB、 MB和分别为GB的数值在数字值, 可以指定 maxFileSize 选项的字节、千字节、mb 或 gb。例如, 5000000、 5000KB、 5MB和2GB都是有效值 |
- encoder 配置
负责将传入事件转换为字符串的组件,如果不指定 class 属性,则使用默认实现类 ch.qos.logback.classic.encoder.PatternLayoutEncoder
<encoder>
<pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>
</encoder>
|
配置属性 |
默认值 |
说明 |
||||||||||||||||||||||
|
pattern |
转换模式由文本和格式控制表达式 (称为转换说明符) 组成。您可以自由地在转换模式中插入任何文本。每个转换说明符以百分比符号 "%" 开头, 后跟可选的格式修饰符、转换字和大括号之间的可选参数。转换词控制要转换的数据字段, 例如记录器名称、级别、日期或线程名称。格式修饰符控制字段宽度、填充和左或右对齐。 %logger{长度}:在日志记录事件的输出记录器的名称 %d{格式}:用于输出日志记录事件的日期和时间
%F 或 %file:输出发出日志记录请求的 Java 源文件的文件名,生成文件信息的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它。 %caller{深度}:输出生成日志记录事件的调用方的位置信息。位置信息取决于 JVM 实现, 但通常包括调用方法的完全限定名, 后跟调用方的源、文件名和括号之间的行号。可以将整数添加到调用方转换说明符的选项中, 以配置要显示的信息的深度。 %L 或 %line:输出记录请求发出位置的行号。生成行号信息的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它 %m、%msg 或 %message:输出与日志记录事件关联的应用程序提供的消息 %M 或 %method:输出发出日志记录请求的方法名称。生成方法名称的速度并不特别快。因此, 除非执行速度不是问题, 否则应避免使用它。 %n:与平台相关的换行符 %level:日志事件级别 %thread:输出生成日志记录事件的线程的名称 %ex{深度}:输出与日志记录事件关联的异常的堆栈跟踪 (如果有)。默认情况下, 将输出完整的堆栈跟踪
|
|||||||||||||||||||||||
Logback 入门和配置说明的更多相关文章
- 【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)
技术介绍 什么是 logback? Logback为取代 log4j 而生.Logback 由 log4j 的创立者 Ceki Gülcü设计.以十多年设计工业级记录系统的经验为基础,所创建的logb ...
- slf4j,log4j,logback 初步使用
log4j,slf4j,logback简单介绍见 LogBack简易教程 Logback浅析 简单的将,slf4j是一个日志的框架,有各种日志的接口,但是并不包含实际的写日志的方法. log4j,lo ...
- Logback相关知识汇总
例如:%-4relative 表示,将输出从程序启动到创建日志记录的时间 进行左对齐 且最小宽度为4格式修饰符,与转换符共同使用:可选的格式修饰符位于“%”和转换符之间.第一个可选修饰符是左对齐 标志 ...
- Java日志 #01# 入门
很多人在学习完一个东西之后就会忘掉自己作为初学者时的体验.. 例如刚接触git的时候自己也是一头雾水,然后别人问起来,老是会说:xxxx#!@#,就是这么回事儿,有什么不好懂的. 其实从不懂到懂,再到 ...
- Logback 专题
logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuratio ...
- SpringBoot系列之从入门到精通系列教程
对应SpringBoot系列博客专栏,例子代码,本博客不定时更新 Spring框架:作为JavaEE框架领域的一款重要的开源框架,在企业应用开发中有着很重要的作用,同时Spring框架及其子框架很多, ...
- java日志规约及配置示例终极总结
目录 什么是日志 常用日志框架 日志级别详解 日志的记录时机 日志使用规约 logback 配置示例 loh4j2 配置示例 什么是日志? 简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方 ...
- Java日志系统
前言 各组件之间的关系: slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实 ...
- 带你掌握Java各种日志框架
一:日志基本概念及框架 1:什么是日志 Java程序员在开发项目时都是依赖Eclipse/IDEA等集成开发工具的Debug调试功能来跟踪解决Bug,但项目打包部署发布到了测试环境和生产环境怎么办?难 ...
随机推荐
- Java虚拟机的组成
Java虚拟机主要分为以下五个区: 一.方法区: 1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2. 方法区主要用 ...
- Spring Boot 揭秘与实战(五) 服务器篇 - Tomcat 启用 HTTPS
文章目录 1. 生成证书 2. 配置 HTTPS 支持 3. 启动与测试 4. 源代码 Spring Boot 内嵌的 Tomcat 服务器可以启用 HTTPS 支持. 生成证书 使用第三方 CA 证 ...
- 机器学习: K-means 聚类
今天介绍机器学习里常见的一种无监督聚类算法,K-means.我们先来考虑在一个高维空间的一组数据集,S={x1,x2,...,xN}" role="presentation&quo ...
- [opencvjichu]cv::Mat::type() 返回值
opencv opencv中Mat存在各种类型,其中mat有一个type()的函数可以返回该Mat的类型.类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位 ...
- virtualenv搭建python3 环境
参考 1.安装python3 安装脚本如下: wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz tar zxvf Python ...
- 网络流Dinic算法
我的模板 例题: https://vjudge.net/problem/HDU-4280 struct Edge { int lst; int from; int to; int cap; int f ...
- 使用定时器通过改变图片的src来切换图片
点击以后开始自动切换图片 $("#page3_cover_1_back").click(function(){ var i=3; var haha=setInterval(func ...
- hdu4300 Clairewd’s message 扩展KMP
Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...
- Python IDLE theme
#转自 http://www.2cto.com/os/201507/418532.html #win10+python3.5.2 #保护视力 .idlerc 目录下新建名为 config-highli ...
- html2canvas用法的总结(转载)
最近做h5网页,有个功能是用户能长按页面保存为图片,在我们理解就是网页要生成图片然后再让用户长按保存,然后就发现了html2canvas这个框架了,效果挺不错了,但是有几个坑说一下(用的最新版): h ...