logback基本入门
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基本入门的更多相关文章
- Logback 快速入门 / 使用详解
官方文档: http://logback.qos.ch/manual/index.html 一.简介 Java 开源日志框架,以继承改善 log4j 为目的而生,是 log4j 创始人 Ceki Gü ...
- logback日志入门超级详细讲解
基本信息 日志:就是能够准确无误地把系统在运行状态中所发生的情况描述出来(连接超时.用户操作.异常抛出等等): 日志框架:就是集成能够将日志信息统一规范后输出的工具包. Logback优势 Logba ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- SpringBoot入门教程(八)配置logback日志
Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-c ...
- Logback 入门和配置说明
Logback 是 Log4j 的改进版本,而且原生支持 SLF4J,Logback 的初始化步骤如下: 在类路径中查找 logback-test.xml 配置文件 在类路径中查找 logback.g ...
- (入门SpringBoot)SpringBoot结合logback(六)
SpringBoot结合logback日志: 1.配置资源文件: #日志配置信息logbacklogging.config=classpath:logback-spring.xmllog.path=E ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战
笔记 2.SpringBoot2.x日志讲解和自定义Logback配置实战 简介:讲解SpringBoot2.x整合Logback配置实战 1.官网介绍:https://docs.spring ...
- 【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)
技术介绍 什么是 logback? Logback为取代 log4j 而生.Logback 由 log4j 的创立者 Ceki Gülcü设计.以十多年设计工业级记录系统的经验为基础,所创建的logb ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
随机推荐
- Navicat 连接Oracle时提示oracle library is not loaded的问题解决
笔者使用的Navicat Premium 12启动界面截屏: 请注意是64位的.笔者win7 64位系统. 连接Oracle时提示“oracle library is not loaded”. 解决方 ...
- [题目] luogu P2061 [USACO07OPEN]城市的地平线City Horizon
算法 线段树 + 离散化 思路 对\((x,y,h)\)的左右端点\(x,y\)进行离散化,离散化前的原值记为\(val[i]\),对每个矩形按高度\(h\)从小到大排序. 设离散化后的端点有\(M\ ...
- PLSQL Developer12连接远程Oracle xe 11g
目标: .学习使用docker下载oracle xe 11g .使用PLSQL连上启动运行oracle xe 11g容器服务 1.准备工作 Linux 安装docker 下载PLSQL Develop ...
- ROS教程0 环境配置
1安装环境配置(桌面进入命令行) echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc source ~/.bas ...
- Rinkeby中测试币的申请
https://www.rinkeby.io/#faucet 从这个页面可以看见测试币的请求是有要求的,下面说明怎么做: 之前使用的是google账号,即第二种方式来获取.后面gmail出现了问题,一 ...
- 网站性能优化小结和spring整合redis
现在越来越多的地方需要非关系型数据库了,最近网站优化,当然从页面到服务器做了相应的优化后,通过在线网站测试工具与之前没优化对比,发现有显著提升. 服务器优化目前主要优化tomcat,在tomcat目录 ...
- android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
主类:IndexAnimationLinearLayout.java package com.yw.sortlistview; import java.util.ArrayList; import j ...
- php中按值传递和按引用传递的一个问题
php中传递变量默认是按照值传递. 简单举个例子: <?php function testArray($arr){// &$arr $arr = array(1,2,3,); } $ar ...
- LOJ2542 PKUWC2018 随机游走 min-max容斥、树上高斯消元、高维前缀和、期望
传送门 那么除了D1T3,PKUWC2018就更完了(斗地主这种全场0分的题怎么会做啊) 发现我们要求的是所有点中到达时间的最大值的期望,\(n\)又很小,考虑min-max容斥 那么我们要求从\(x ...
- Vue-父子组件传值
在 Vue 中,父子组件的关系可以总结为 prop 向下传递,事件向上传递.一.父组件向子组件传值 使用 Prop 传递数据,父组件的数据需要通过 prop 才能下发到子组件中,子组件要显式地用 pr ...