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

日志能力:

  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. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...

  2. circus 进程以及socket 管理工具&&docker运行

    circus 是由mozilla 团队开发基于python 以及zeromq 的进程以及socket 管理的工具,类似supervisord 但是比supervisord 更灵活方便 来自官方的使用比 ...

  3. Nodejs仿Apache的部分功能

    一.初步实现Apache的部分功能 //1.加载模块 var http=require('http'); var fs=require('fs'); //2.创建server var server=h ...

  4. 通过三层交换机实现不同VLAN间的通信

    主机的IP地址以及子网掩码已列出,下面将讲解如何配置利用三层交换机来实现不同VLAN间的相互通信 SW1的命令: en  //进入特权模式 conf  t   //全局模式 vlan 10    // ...

  5. 洛谷P2659 美丽的序列

    题目 该题目可以用辅助数组l[i], r[i]来指向以data[i]为最小值的左端点和右端点.然后最后枚举每个data[i]寻找每个data[i]的美丽值的最大值. 然后辅助数组可以用单调栈求出. # ...

  6. URL的作用是什么?它由几部分组成?

    URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它 ...

  7. 【牛客】小w的魔术扑克 (并查集?? 树状数组)

    题目描述 小w喜欢打牌,某天小w与dogenya在一起玩扑克牌,这种扑克牌的面值都在1到n,原本扑克牌只有一面,而小w手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小w这个人就准 ...

  8. 【2019.11.27】SDN课程阅读作业(2)

    过去20年中可编程网络的发展可以分为几个阶段?每个阶段的贡献是什么? Making computer networks more programmable enables innovation in ...

  9. Prometheus监控神技--自动发现配置

    一.自动发现类型 在上一篇文中留了一个坑: 监控某个statefulset服务的时候,我在service文件中定义了个EP,然后把pod的ip写死在配置文件中,这样,当pod重启后,IP地址变化,就监 ...

  10. 20189220 余超《Linux内核原理与分析》第四周作业

    构造一个简单的Linux系统MenuOS 第三章基础知识 计算机的三大法宝:存储计算机,函数调用堆栈,中断. 操作系统的两把宝剑:中断上下文,进程上下文. Linux内核源码的目录结构: arch目录 ...