日志框架一logback配置和使用
把logback或者log4j放在src/main/resources下,Spring容器就可以自动加载日志文件。
前言
Logback是由log4j创始人设计的又一个开源日志组件, 比log4j的性能好.
1.导入依赖
<!--这个依赖直接包含了 logback-core 以及 slf4j-api的依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
2.Logback的主要模块
- logback-core: 核心代码模块
- logback-classic: log4j的一个改良版本,同时实现了slf4j的接口,这样你如果之后要切换其他日志组件也是一件很容易的事
- logback-access: 访问模块与Servlet容器集成提供通过Http来访问日志的功能
3.配置获取顺序
logback在启动的时候,会按照下面的顺序加载配置文件:
- 如果java程序启动时指定了
logback.configurationFile
属性,就用该属性指定的配置文件。
如java -Dlogback.configurationFile=/path/to/mylogback.xml Test
,这样执行Test类的时候就会加载/path/to/mylogback.xml
配置. - 在classpath中查找
logback.groovy
文件 - 在classpath中查找
logback-test.xml
文件 - 在classpath中查找
logback.xml
文件 - 如果是 jdk6+,那么会调用ServiceLoader 查找
com.qos.logback.classic.spi.Configurator
接口的第一个实现类,
自动使用ch.qos.logback.classic.BasicConfigurator
,在控制台输出日志.
4.配置文件的节点的结构
contextName节点
设置日志上下文名称,后面输出格式中可以通过定义%contextName
来打印日志上下文名称
property节点
用来设置相关变量,通过key-value的
方式配置,然后在后面的配置文件中通过${key}
来访问
appender:负责写日志的组件, 主要用来设置日志的输出位置, 日志文件的生成策略等
appender
ConsoleAppender
:向控制台输出日志内容的组件,只要定义好encoder
节点就可以使用。<encoder>
:对记录事件进行格式化。filter
:定义了一个过滤器,在LEVEL
之下的日志输出不会被打印出来
FileAppender
:向文件输出日志内容的组件,用法也很简单,不过由于没有日志滚动策略,一般很少使用RollingFileAppender
:向文件输出日志内容的组件,同时可以配置日志文件滚动策略,在日志达到一定条件后生成一个新的日志文件. 它有下面几个子节点:<file>
:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。<append>
:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。<encoder>
:对记录事件进行格式化。Policy
:两个常用热门的策略,TimeBaseRollingPolicy
,SizeBasedTriggeringPolicy
-TimeBaseRollingPolicy
:根据fileNamePattern
标签来表示什么周期触发一次,生成新的日志文件
-SizeBasedTriggeringPolicy
:表示基于文件大小进行滚动<rollingPolicy>
:当发生滚动时,决定RollingFileAppender
的行为,涉及文件移动和重命名。<triggeringPolicy>
: 告知RollingFileAppender
何时激活滚动。<prudent>
:当为true时,不支持FixedWindowRollingPolicy
。支持TimeBasedRollingPolicy
,但是有两个限制,1不支持也不允许文件压缩,2不能设置file属性,必须留空。filter
:定义了一个过滤器,在LEVEL之
下的日志输出不会被打印出来
logger:为不同的包使用不同的log配置,用来设置某一个包或者具体的某一个类的日志打印级别
name
:用来指定受此loger约束的某一个包或者具体的某一个类。level
:用来设置打印级别(日志级别),大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果上面的logger没有设置level属性, 会继承root的属性addtivity
:是否向上级loger传递打印信息。默认是true。我们可以使用logger节点的additivity="false"属性来屏蔽rootLogger的appender。这样就可以不使用rootLogger的appender输出日志了。
<logger>
可以包含零个或多个<appender-ref>
元素,标识这个appender将会添加到这个loger。
root:也是元素,但是它是根logger,只有一个level属性
- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG。
- 如果上面的logger没有设置level属性, 会继承root的属性。
- 可以包含零个或多个元素。
注:
root
与logger
同时引入同一个appender
,并且additivity="true"
,则这个appender
会输出多份
。level
默认是以覆盖的方式继承的,如果父亲
的级别是DEBUG
,如果在这个logger
中设置了INFO
,最终这个logger的级别就是INFO
。- 如果一个指定的
logger
标签没有指定level
的话,就会继承离他最近的祖先的级别
。 - 如果
appender
指定了filter
,logger
不用写level属性。
<?xml version="1.0" encoding="utf-8"?>
<!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。-->
<!--scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。-->
<!--debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--日志上下文名称-->
<contextName>logback</contextName>
<!--定义参数常量-->
<property name="log.level" value="debug"></property>
<property name="log.maxHistory" value="30"></property>
<property name="log.filePath" value="/"></property>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n">
</property>
<!--级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL-->
<!--日志输出规则:根据当前ROOT级别,日志输出时,级别高于root默认的级别时会输出-->
<!--控制台设置-->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!--记录事件进行格式化-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--日志文件-->
<!--滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件RollingFileAppender-->
<!--debug-->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路径-->
<file>${log.filePath}/debug.log</file>
<!--当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名。-->
<!--最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责触发滚动。根据<fileNamePattern>确定滚动时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--文件名称-->
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<!--文件最大保存历史 30天-->
<maxHistory>${log.maxHistory}</maxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>5M</MaxFileSize>
</rollingPolicy>
<!--记录事件进行格式化-->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!--定义了一个过滤器,在level之下的日志输出不会被打印出来-->
<!--这里定义了DEBUG,也就是控制台不会输出比DEBUG级别小的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置过滤级别 -->
<level>DEBUG</level>
<!--ACCEPT–打印
DENY– 不打印
NEUTRAL–中立-->
<!-- 用于配置符合过滤条件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用于配置不符合过滤条件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--info-->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件名称-->
<file>${log.filePath}/info.log</file>
<!--按照固定窗口模式生成日志文件,当文件大于5MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。-->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--设置一个向上传递的appender,所有级别的日志都会输出-->
<appender name="appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.filePath}/all.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.filePath}/all/all.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
<maxHistory>${log.maxHistory}</maxHistory>
<MaxFileSize>5M</MaxFileSize>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--设置某一个包或者具体的某一个类的打印级别,name代表包名。会屏蔽rootLogger的appender-->
<logger name="com.Logger" additivity="false">
<appender-ref ref="consoleAppender"/>
<!--分级别分别输出(debugAppender和infoAppender),屏蔽root的appender-->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
</logger>
<!-- 打印debug级别日志及以上级别日志 -->
<root level="DEBUG">
<!-- 控制台输出 -->
<appender-ref ref="consoleAppender"/>
<!-- 不管什么包下的日志都输出到文件,所有级别的日志分级别输出-->
<!--<appender-ref ref="ERROR"/>-->
<!--<appender-ref ref="INFO"/>-->
<!--<appender-ref ref="WARN"/>-->
<!--<appender-ref ref="DEBUG"/>-->
<!--<appender-ref ref="TRACE"/>-->
</root>
</configuration>
五.使用Log大致需要下面三个步骤:
- 配置logback运行参数,一般通过logback.xml配置即可
- 在每个需要进行log的类中,创建一个Logger实例
private static final Logger log= LoggerFactory.getLogger(this.class);
- 使用这个实例,调用debug(), info(), warn(), error(),trace()等方法向Appenders输出不同级别的Log
Appenders是输出源,在LogBack中可以使用控制台、文件、系统log、TCP端口等等多种输出源。
log.info("I am fine.");
日志框架一logback配置和使用的更多相关文章
- Java日志框架:logback详解
为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结 ...
- 【转】Java日志框架:logback详解
为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战
笔记 2.SpringBoot2.x日志讲解和自定义Logback配置实战 简介:讲解SpringBoot2.x整合Logback配置实战 1.官网介绍:https://docs.spring ...
- 日志框架之Logback
1 日志框架选择 日志门面:SLF4J 日志实现:Logback 2 实现控制台的日志打印输出01 2.1 在需要实现日志信息打印的类中实例化Logger对象 private final Logger ...
- java日志框架log4j详细配置及与slf4j联合使用教程
最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...
- spring boot 日志介绍 以及 logback配置示例
https://www.cnblogs.com/flying607/p/7827460.html 以下是springboot的一个局部依赖关系: 可以看到,java util logging(jul) ...
- [转载]java日志框架log4j详细配置及与slf4j联合使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- java日志框架log4j详细配置及与slf4j使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- SpringBoot04 日志框架之Logback
1 日志框架选择 日志门面:SLF4J 日志实现:Logback 2 实现控制台的日志打印输出01 2.1 在需要实现日志信息打印的类中实例化Logger对象 坑01:springBoot项目默认使用 ...
随机推荐
- python接口自动化(put请求)
python接口自动化(put请求) 一.put请求的作用:更新资源 二.应用 导包:import requests 调用requests.put()方法 参数有URL.data.headers,方法 ...
- Nginx负载均衡与转发
1.6种负载均衡策略 1.轮询 :默认方式 2.weight : 权重方式 3.ip_hash :依据ip分配方式 4.least_conn :最少连接方式 5.fair(第三方) :响应时间方式 6 ...
- 结对编程项目报告--四则运算CORE
<!doctype html> sw_lab2.mdhtml {overflow-x: initial !important;}#write, body { height: auto; } ...
- 安装apache的注意事项
在安装apache的时候我们一般都会用yum一键安装,但是很少去考虑相关的依赖包有什么,所以今天特意做一个记录,方便以后编译安装的时候,进展顺利. yum install httpd Installi ...
- Loop Sql
-- Numeric FOR loop -- set serveroutput on -->> do not use in TOAD -- DECLARE k ; BEGIN .. LOO ...
- [转]sourceforge文件下载过慢
sourceforge文件下载过慢,可以用下面网址镜像下载, 通过 下载Sourceforge等国内无法下载站点文件的另一种方法博文,好像主站点是 https://www.mirrorservice. ...
- WPS Office for Mac如何修改Word文档文字排列?WPS office修改Word文档文字排列方向教程
Word文档如何改变文字的排列方向?最新版WPS Office for Mac修复了文字排版相关的细节问题,可以更快捷的进行Word编辑,WPS Office在苹果电脑中如何修改Word文档文字排列方 ...
- Q:微信小程序一次性订阅消息(前台收集)
说明:官方文档(https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.ht ...
- Development 编程规范
{ 命名规范类命名 1)所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写. 类,接口名必须是有意义的,切忌使用中文拼音命名.另外所有类都要加标致前缀:“O ...
- 阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
2018年12月13日,第八届中国云计算标准和应用大会在京召开,会上阿里云HBase宣布推出全新X-Pack服务,支持SQL.时序.时空.图.全文检索能力.复杂分析,从处理到分析全栈式数据库,客户开箱 ...