spring_boot实战日记(二)logback的使用和配置
日志:描述系统运行状态的所有信息都是日志.
日志能力:
1.定制输出目标.
2.定制输出格式.
3.携带上下文信息
4.运行时选择输出.
5.灵活的配置
日志选择:
日志门面:JCL(和Logback不是一个作者) SLF4j(作者相同) jboos-logging(非面向大众)
日志实现:Log4j(作者自己说太烂了) Log4j2(太过复杂,性能最优,但是基本上不会用到) Logback(Log4j的第二代) JUL(太过简陋)
显然我们可以应该选择:SLF4j+Logback.
如何使用:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* Created by kkm on 2019/12/3.
*/
@RunWith(SpringRunner.class)
@SpringBootTest public class LoggerTest {
private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
@Test
public void test1(){
logger.debug("debug...");
logger.info("info...");
logger.error("error...");
}
}
右键运行test1,可以在控制台看到输出.
可以看到debug没有输出,因为info等级比他高,如果下面有info要输出,那么debug不会输出.
window系统下面可以使用按键 ctrl+shift+alt+N,呼出类查找框 然后输入 Level 到slf4j中查找就可以看到各种级别的日志.

logger是LoggerFactory的实例化,这个地方应该填对应类名.

可以看到现在输出就是当前类名,如果你改成其他类那么,这个输出也会改变.
有的小伙伴说这样我每次写都要写个这个的实例化,太麻烦了,其实如果你懂控制反转的话,这一句是可以省略的,使用插件lombok,就可以使用注解省略这一句话,但是这样就是另外一个坑了.
如果有插件lombok,那么只需要这样写
package com.ccpuc; import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* Created by kkm on 2019/12/8.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1(){
log.debug("debug...");
log.info("info...");
log.error("error...");
}
}
可以看到结果一样的
2019-12-08 21:06:46.738 INFO 7384 --- [ main] com.ccpuc.LoggerTest : info...
2019-12-08 21:06:46.738 ERROR 7384 --- [ main] com.ccpuc.LoggerTest : error...
除了可以使用字符串拼接,log还支持格式化输出.
log.info("name:{},,,id:{}","第一个大括号","第二个大括号");
输出:2019-12-08 21:10:53.209 INFO 13036 --- [ main] com.ccpuc.LoggerTest : name:第一个大括号,,,id:第二个大括号
以上都是在控制台输出,logback还支持文件输出.
logback的配置方法,可以通过applicatin.yml文件配置.
logging.pattern.console : 输出到控制台的格式.(顺带一提,yml的注释使用#)
logging.config : 配置文件路径
logging.path : 输出的日志文件路径(这个会使用默认的spring作为文件名称)
logging.file : 输出的日志文件路径(这个可以指定)
logging.level : 指定输出日志的级别,level还可以指定到包指定到类.
logging:
pattern:
# console: "%d - %msg%n"
# path: C:\Users\kkm\Desktop\actual\dsell_test\log
# file: C:\Users\kkm\Desktop\actual\dsell_test\log\dsell
# level:
# com.ccpuc.LoggerTest : debug
去掉#既可以生效.
记得要注释掉上面的然后再用logback-spring.xml来配置.
还可以通过logback-spring.xml来配置,上面的application.yml的配置比较简单.往往需要使用xml来配置才能满足我们日常的需要.
具体可以看代码...注释解释...
<?xml version="1.0" encoding="UTF-8" ?> <configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!--日志格式-->
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--根据等级过滤-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--要过滤除INFO等级以外的,如果onMatch,就ACCEPT,就是接收日志,反之DENY,就是过滤不要-->
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<!--日志格式-->
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略,基于时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出文件-->
<fileNamePattern>
C:\Users\kkm\Desktop\actual\dsell_test\log\info\info.%d.log
</fileNamePattern>
</rollingPolicy>
</appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--根据等级范围过滤,就是过滤掉选择等级低的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<!--日志格式-->
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略,基于时间-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出文件-->
<fileNamePattern>
C:\Users\kkm\Desktop\actual\dsell_test\log\error\error.%d.log
</fileNamePattern>
</rollingPolicy>
</appender> <root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root> </configuration>
spring_boot实战日记(二)logback的使用和配置的更多相关文章
- 非阻塞同步算法实战(二)-BoundlessCyclicBarrier
本人是本文的作者,首发于ifeve(非阻塞同步算法实战(二)-BoundlessCyclicBarrier) 前言 相比上一 篇而言,本文不需要太多的准备知识,但技巧性更强一些.因为分析.设计的过程比 ...
- 响应性web设计实战总结(二)
响应性web设计实战总结(二) 阅读目录 背景知识: Gulp-less安装及配置如下 对响应性web总结,之前总结过2篇文章:可以看如下: http://www.cnblogs.com/tugenh ...
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- [原创].NET 分布式架构开发实战之二 草稿设计
原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...
- python机器学习实战(二)
python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...
- Mybaits-plus实战(二)
1. Mybaits-plus实战(二) 1.1. mybatis-plus插件 1.1.1. 用法 先举个例子介绍用法,如下:直接作为Bean注入,一般来讲插件太多印象性能,所以大部分插件都只在测试 ...
- 【深度学习系列】PaddlePaddle垃圾邮件处理实战(二)
PaddlePaddle垃圾邮件处理实战(二) 前文回顾 在上篇文章中我们讲了如何用支持向量机对垃圾邮件进行分类,auc为73.3%,本篇讲继续讲如何用PaddlePaddle实现邮件分类,将深度 ...
- oracle入坑日记<二>认识oracle(含sqlplus基础使用)
1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
随机推荐
- HBase的二级索引
使用HBase存储中国好声音数据的案例,业务描述如下: 为了能高效的查询到我们需要的数据,我们在RowKey的设计上下了不少功夫,因为过滤RowKey或者根据RowKey查询数据的效率是最高的,我们的 ...
- rhcsa备战笔记
笔记全部手打 转载请加原文链接 0)重置密码开机按e 找到linux16行 rd.break console=tty0 ctrl+xmount -o remount,rw /sysrootchroo ...
- Java Web 项目的文件/文件夹上传下载
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- Python 08 skimage
原文:https://www.cnblogs.com/xdjun/p/7874794.html 命令: pip install numpy pip install scipy pip install ...
- AD域服务器组策略实现文件夹重定向 保护文件安全
网络管理员或许都遇到过类似的烦恼.如系统崩溃后,原来存放在 C盘的应用程序专署数据都丢失了;或者桌面上的文件莫名其妙少了,等等.有时候,我们也千方百计提醒员工不要把文件存放在桌面上,但是他们总是不听 ...
- Noip 2017 题目整理
目录 2017Noip: 小凯的疑惑 时间复杂度 逛公园 奶酪 宝藏(50fen) 列队(QAQ不会,以后再研究吧) 2017Noip: 小凯的疑惑 题目描述 小凯手中有两种面值的金币,两种面值均为正 ...
- (转)React事件处理函数必须使用bind(this)的原因
1.JavaScript自身特性说明如果传递一个函数名给一个变量,之后通过函数名()的方式进行调用,在方法内部如果使用this则this的指向会丢失.示例代码:首先我们创建test对象并直接调用方法 ...
- 【洛谷】P1449 后缀表达式
P1449 后缀表达式 分析: 简单的模拟题. 熟练容器stack的话很容易解决. stack,栈,有先进后出的特性. 比如你有一个箱子,你每放进第一个数时,就往箱底放,放第二个数时就在第一个数的上面 ...
- SpringMVC(下)
一.访问静态资源 在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL 在设置url-pattern时可以设置三种形式 (1)/* :拦截所有 ...
- python ocr图片中汉字识别
import os os.chdir("C:\Program Files (x86)\Tesseract-OCR") main = "Tesseract.exe d:/t ...