springBoot(10)---logback日志
logback日志
一、概述
和log4j优点:
实际上,这两个日志框架都出自同一个开发者之手,Logback 相对于 Log4J 有更多的优点
(1)logback不仅性能提升了,初始化内存加载也更小了。
(2)内容更丰富的文档
(3)更强大的过滤器
二、步骤
1、maven配置jar包
logback默认就在spring-boot-starter-web包中,所以我们只要有spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、新建logback-spring.xml
springboot官方建议命名为logback-spring.xml,在src/main/resources新建logback-spring.xml,这里不需要在application.properties中配置
默认加载加载配置顺序 logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 打印到控制台 -->
<appender name="consoleApp" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</layout>
</appender> <!-- 打印到文件 -->
<appender name="fileInfoApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径 -->
<fileNamePattern>app_log/log/app.info.%d.log</fileNamePattern>
</rollingPolicy>
</appender> <!-- 打印到文件 -->
<appender name="fileErrorApp" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n
</pattern>
</encoder> <!-- 设置滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 路径,因为有 %d所以每天都会意时间来创建新的文件 -->
<fileNamePattern>app_log/log/app.err.%d.log</fileNamePattern> <!-- 控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,
且<maxHistory> 是1,则只保存最近1个月的文件,删除之前的旧文件 -->
<MaxHistory>1</MaxHistory> <!-- 保持30天的历史记录上限为3GB总大小 -->
<totalSizeCap>3GB</totalSizeCap> </rollingPolicy>
</appender>
<!--这里选择INFO就代表,进行INFO级别输出记录,那么在控制台也好,log文件也好只记录INFO及以上级别的日志,这里相当于第一道过滤器-->
<root level="INFO">
<appender-ref ref="consoleApp"/>
<appender-ref ref="fileInfoApp"/>
<appender-ref ref="fileErrorApp"/>
</root>
</configuration>
有关配置文件详细介绍放到下面讲,这里先跳过
3.controller类
@RestController
@RequestMapping("/api/v1")
public class UserController { private Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping("log")
public Object testLog(){ logger.debug("---debug---debug---");
logger.info("---info---信息---");
logger.warn("---warn ---警告--- ");
logger.error("---err---错误---");
//这也是个错误的日志级别
int i=1/0;
return "yes";
} }
4、效果:
我们发现,在项目中自动创建app_log/log/app.info(当天日期).log和app.err(当天日期).log文件
然后我们看
app.err.2018-05-21.log
它只存放err级别日志
app.info.2018-05-21.log
它只存放的info和warn两种基本日志,这是为什么呢?详细介绍下配置文件
三、配置文件介绍
一:根节点<configuration>
它的三个子节点
(1)<appender></appender> 格式化日志输出节点,有两个必要属性name和class。
(2) <logger></logger> 用来设置某一个包或具体的某一个类的日志打印级别、以及指定<appender>。
(3)<root></root>(要加在最后)(必选,而且只有一个)(用来指定最基础的日志输出级别,他有俩个自己点可以用来应用appender,格式化日志输出)
二、appender节点
它有两个属性name和class
(1) class="ch.qos.logback.core.ConsoleAppender":把日志输出到
(2)class="ch.qos.logback.core.FileAppender":把日志添加到文件
(3)class="ch.qos.logback.core.rolling.RollingFileAppender":滚动记录文件,先将日志文件指定到文件,当符合某个条件时,将日志记录到其他文件
所以上面第一个appender代表输出到控制台,同时并没有进行任何过滤,所以只要是INFO级别以上的都会在控制台输出。
四、filter过滤器
其它的一看就懂,就这里,一开始一直想不明白,为什么上面的info文件里只有info和warn,而err文件中只有err日志。后来明白了。
他有几个常用的过滤器
(1)LevelFilter 过滤器
级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<level>:设置过滤级别
将过滤器的日志级别配置为ERROR,所有ERROR级别的日志交给appender处理,非ERROR级别的日志,被过滤掉。
(这样的话那上面不是只显示ERROR日志,怎么最后显示的是INFO和WARN日志呢?看下面)
<onMatch>: 用于配置符合过滤条件的操作
<onMismatch>:用于配置不符合过滤条件的操作
再看有这么几个单词DENY(拒绝),NEUTRAL(中性),ACCEPT(接受)
(1)返回DENY,日志将立即被抛弃不再经过其他过滤器;
(2)返回NEUTRAL,有序列表里的下个过滤器过接着处理日志;
(3)返回ACCEPT,日志会被立即处理,不再经过剩余过滤器
在理解下:
<level>ERROR</level> <!-- 所有ERROR级别的日志交给appender处理,非ERROR级别的日志,被过滤掉 -->
<onMatch>DENY</onMatch> <!-- 代表符合过滤条件的拒绝输出 -->
<onMismatch>ACCEPT</onMismatch> <!-- 不符合过滤条件的接受输出 -->
我靠,这么绕一圈不还是表示非ERROR级别的输出嘛,DEBUG除外,因为DUBUG在root标签,已经过滤掉,都不会走到appender标签这里
(2)ThresholdFilter 过滤器
临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
这里只会访问ERROR及以上级别的过滤器,而ERROR已经是最高级了,所以就只显示ERROR日志在errer文件中了,所以一切都通了
github源码:源码
想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。上尉【11】
springBoot(10)---logback日志的更多相关文章
- springboot配置logback日志
springboot配置logback日志 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日 ...
- SpringBoot整合+logback日志配置
本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...
- SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现.为Java Util Logging.Log4J2和Logback提供了默认配置.在不同的情况下,日志记录器都预先配置为使 ...
- SpringBoot整合Logback日志框架配置全解析
目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...
- 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战
========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...
- SpringBoot中Logback日志的配置
说明 在SpringBoot中自带的日志工具是Logback,我们可以在Springboot的配置文件中直接对Logback进行一些简单的配置,如: logging.level.com.nowcode ...
- Springboot:logback日志管理(九)
Springboot默认使用的日志框架就是logback 创建自定义的logback-spring.xml放在resources类目录下即可 logback-spring.xml: <?xml ...
- springboot使用之三:springboot使用logback日志
springboot 默认使用的日志就是logback,所以使用logback不需要添加日志相关依赖了,执行 添加logback.xml配置文件,springboot这个聪明的框架便能识处理你的配置. ...
- springboot集成logback日志
简介 spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logback. 如 ...
随机推荐
- 常用JSON接口
地图接口阿里云根据地区名获取经纬度接口http://gc.ditu.aliyun.com/geocoding?a=苏州市 官方文档参数解释: 纬度,经度 type 001 (100代表道路,010代表 ...
- 2018上IEC计算机高级语言(C)作业 第3次作业_说明
一.博客作业内容 2018上IEC计算机高级语言(C)作业 第3次作业 二.评分规则说明 1.程序调试题,要描述出调试所遇到问题及修改内容,并表述清楚程序功能.流程图不规范的会减1-2分: 2.知识点 ...
- mui getJSON实现jsonp跨域
//刚开始做APP的时候,后台给的方式是jsonp,然后就百度mui框架的jsonp跨域,看了好多文章,都说可以支持,但是大部分都是直接把别人复制来的,都不知道是不是真的能支持,做好打包完的时候,下载 ...
- Linux环境下Flask部署至apache
https://blog.csdn.net/rainbowlemonade/article/details/79725328
- 从React组件划分的纠结到总结
在实际开发项目中,我将所有的React组件划分为容器组件和展示组件,展示组件其实就是一个纯函数组件,没有任何副作用,基本都是PureComponent.但是突然,出现了这么一个问题: 我有一个浮层组件 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- noip第29课资料
- vue数据双向绑定
Vue的双向绑定是通过数据劫持结合发布-订阅者模式实现的,即通过Object.defineProperty监听各个属性的setter,然后通知订阅者属性发生变化,触发相应的回调. 整个过程分为以下几步 ...
- java实现自动生成小学四则运算——朱庭震,詹祺豪
组员:朱庭震,詹祺豪 Github地址:https://github.com/ztz1998/second/tree/master 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自 ...
- <mvc:annotation-driven> 中的HttpMessageConverters 的理解
用烂的图 配置一个或多个HttpMessageConverter类型以用于转换@RequestBody方法 参数和@ResponseBody方法返回值. 使用此配置元素是可选的. 此处提供的Http ...