日志:描述系统运行状态的所有信息都是日志.

日志能力:

  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的使用和配置的更多相关文章

  1. 非阻塞同步算法实战(二)-BoundlessCyclicBarrier

    本人是本文的作者,首发于ifeve(非阻塞同步算法实战(二)-BoundlessCyclicBarrier) 前言 相比上一 篇而言,本文不需要太多的准备知识,但技巧性更强一些.因为分析.设计的过程比 ...

  2. 响应性web设计实战总结(二)

    响应性web设计实战总结(二) 阅读目录 背景知识: Gulp-less安装及配置如下 对响应性web总结,之前总结过2篇文章:可以看如下: http://www.cnblogs.com/tugenh ...

  3. [Java聊天室server]实战之二 监听类

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  4. [原创].NET 分布式架构开发实战之二 草稿设计

    原文:[原创].NET 分布式架构开发实战之二 草稿设计 .NET 分布式架构开发实战之二 草稿设计 前言:本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下 ...

  5. python机器学习实战(二)

    python机器学习实战(二) 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7159775.html 前言 这篇noteboo ...

  6. Mybaits-plus实战(二)

    1. Mybaits-plus实战(二) 1.1. mybatis-plus插件 1.1.1. 用法 先举个例子介绍用法,如下:直接作为Bean注入,一般来讲插件太多印象性能,所以大部分插件都只在测试 ...

  7. 【深度学习系列】PaddlePaddle垃圾邮件处理实战(二)

    PaddlePaddle垃圾邮件处理实战(二) 前文回顾   在上篇文章中我们讲了如何用支持向量机对垃圾邮件进行分类,auc为73.3%,本篇讲继续讲如何用PaddlePaddle实现邮件分类,将深度 ...

  8. oracle入坑日记<二>认识oracle(含sqlplus基础使用)

    1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...

  9. apollo入门demo实战(二)

    1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...

随机推荐

  1. 清除DNS缓存和刷新DHCP列表

    ipconfig /release 只是释放IP地址,然后还需要ipconfig /renew在重新获取一下 如何清除DNS缓存?开始-运行,如下图所示: 在谈出的对话框中输入“cmd”,如下图所示: ...

  2. python中的object

    继承 object 类的是新式类,不继承 object 类的是经典类,在 Python 2.7 里面新式类和经典类在多继承方面会有差异: class A: def foo(self): print(' ...

  3. 洛谷 P3605 [USACO17JAN]Promotion Counting晋升者计数

    题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...

  4. Tensorflow可视化-P295-Tensorboard可视化

    各模块含义 1>表示一个Batch的大小是不确定的 2>当两个节点之间传输的张量多与1时,可视化效果图将只显示张量的个数 3>效果图上的粗细表示两个节点之间传输的标量维度的总大小,而 ...

  5. 持续集成学习4 jenkins常见功能

    一.节点选择 1.yum安装jdk yum install -y java-1.8.0 java-1.8.0-openjdk-devel 2.节点选择有三种方式 a.通过系统自带功能限制任务只能在这个 ...

  6. The two of the oldest man need cheers

    At a company dinner, the drinking rule was that two colleagues of similar age clinked glasses of win ...

  7. 【区间DP】加分二叉树

    https://www.luogu.org/problemnew/show/P1040#sub 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为 ...

  8. nodejs之MongoDB安装[windows平台]

    下载MongoDB,本为下载msi文件安装,下载地址     下载完成之后直接双击文件安装,安装时注意安装路径 创建一个空文件夹,用于存放数据库文件 通过控制台进入安装目录下的bin目录,或者在bin ...

  9. C博客作业--我的第一篇博客作业

    1你对网络专业或计算机专业了解是怎样的 由于从小就与电脑打交道,对于各类软件的生产非常感兴趣,所以在高三开学查询有什么专业的时候,就打算报与计算机有关的专业.我对计算机专业感到非常神奇,毕竟只是看似简 ...

  10. 多维矩阵转一维数组(c++)【转载】

    在由二维矩阵转为一维数组时,我们有两种方式:以列为主和以行为主. 以列为主的二维矩阵转为一维数组时,转换公式为: index=column+row×行数 以行为主的二维矩阵转为一维数组时,转换公式为: ...