spring-boot日志

计算机组成
• 阅读 4969

这篇文章是边听尚硅谷的课程边记的笔记,也是为了之后方便查看,视频链接:https://www.bilibili.com/vide...

1. 精彩的故事

小张负责一个大型系统的开发,为了监控系统的运行状况,系统中包含大量的System.out.println()语句,为了更好地管理呢,小张决定写一个日志框架对日志进行管理,他设想的日志框架应该包含以下几个功能:

  1. 日志应该能分为不同的等级
  2. 日志应该按天保存在文件中

在此基础上小张开发出了这样一个日志框架,但是为了使用这个日志框架,当小张修改了这个日志框架中的内容之后,系统中相关的代码都需要进行修改。为此,小张想到了一种模式:
小张为所有的日志框架写了一个统一的接口层:日志门面(抽象层),该日志门面定义了通用的功能接口,具体的实现可以有不同的实现

2. 市面上的日志框架

日志门面(日志抽象层) 日志实现
Jakarta Commons Logging(不再更新),jboss-logging(生来不为普通程序猿所用), slf4j log4j(落后),java.util.Logging(不好用),Logback,Log4j2(与Log4j开发不是同一人)

最终选择:日志门面:slf4j 日志实现:Logback

3. slf4j

  • 如何在系统中使用slf4j,在系统中导入slf4j和logback的jar包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

每个日志框架都有自己的配置文件,使用slf4j后,配置文件还是使用日志实现框架自己本身的配置文件

4. 日志框架兼容问题

假如我现在开发A系统用的日志框架是slf4j+logback,但是开发系统时用到了spring框架(框架本身的日志记录依赖common-logging),Hibernate(jboss),Mybatis....那么我这个系统如何统一使用slf4j+logback进行日志记录??

spring-boot日志

解决方案:
  1. 将系统中其他日志框架先排除掉
  2. 用中间包来替换原有的日志框架
  3. 再导入slf4j的其他的实现

5. SpringBoot日志关系

  1. spring-boot-starter
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
  1. sring-boot-starter-logging
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

spring-boot日志

总结:

  1. SpringBoot底层也是使用slf4j+Logback的方式进行日志记录;
  2. SpringBoot也把其他的日志框架替换成了slf4j
  3. 如果我们引入了其他框架,一定要把这个框架的默认日志框架移除掉
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

6. SpringBoot日志使用

1. 默认配置

SpringBoot默认给我们配置好了日志,可以直接使用,默认的日志级别是info;

    Logger logger = LoggerFactory.getLogger(getClass());

    @Test
    public void contextLoads() {
        /*日志级别trace<debug<info<warn<error*/
        logger.trace("这是trace日志");    
        logger.debug("这是debug日志");
        logger.info("这是info日志");
        logger.warn("这是warn日志");
        logger.error("这是error日志");
    }

2. 修改日志的配置

# 配置整个项目的日志级别
logging.level.root=debug

# 配置指定包下面的日志级别
logging.level.com.luhuiling=info
 
# logging.file指定日志文件的名称,如果不指定,日志只在控制台输出
logging.file=D:/springboot.log

# logging.path指定日志文件的路径,如果不指定,文件将存放在项目根目录下
logging.path

# 控制台输出日志的格式
logging.pattern.console 
        
# 文件中输出日志的格式
logging.pattern.file 
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
samzhangjy samzhangjy
4年前
小学生都能听懂的C++:第一讲 初识C++
视频链接:<https://www.bilibili.com/video/BV1hw411f7nz/请留下你的三连支持!!
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Creator 2.2.0 终于等来了这款Shader组件神器!一招搞定Effect特效
先看下视频演示:!file(https://oscimg.oschina.net/oscnet/b5ec2c0b961876d8e0be8d4902570bb2537.jpg)视频链接:https://www.bilibili.com/video/av74066806/(https://www.oschina.net/action/GoToL
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(