SpringBoot起飞系列

Stella981
• 阅读 707

一、SpringBoot中的日志组件

日志是一个系统中不可缺少的组件。在项目中,我们常用的日志组件有JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....,这里边有抽象层定义,有实现层,用一张图我们来看一下:

SpringBoot起飞系列

说明:

1.其中JCL是我们spring中的常用日志框架commons-logging,只不过在2014年就不更新了,jboss-logging是特定领域的框架,不适合我们使用。

2.springboot中采用的日志框架就是SLF4j(抽象层)和实现层Logback,log4j2和Logback都是log4j的升级版,只不过Log4j2用的还不是太广泛,现在大多数使用Logback。

二、SLF4j的使用

2.1 基本使用方法

现在我们使用的默认配置,springboot已经帮我们设置好了日志框架,我们直接使用就可以了。

首先我们添加引用实例,然后写上代码:

public class DemoApplicationTests {
    private Logger logger = LoggerFactory.getLogger(getClass());
    
    @Test
    public void loggerTest() {
        logger.trace("trace log...");
        logger.debug("debug log...");
        logger.info("info log...");
        logger.warn("warn log...");
        logger.error("error log...");
    }            
}

输出如下:

SpringBoot起飞系列

可以看出这里我们只输入了info,warn和error的日志,其他两个trace和debug的日志没有输出来,这是什么原因呢?

其实这里的日志是分级别的,当你设置了一个日志级别之后,低于这个级别的日志信息是不会打印出来的,当我们的环境不一样的时候可能要输出的日志级别也不一样,比如开发环境可能需要debug的日志,生产环境可能需要warn和error的日志等等。

日志的级别由低到高为 trace<debug<info<warn<error,springboot中默认的级别是info级别的,所以小于info级别的trace和debug就没有输出。

2.2 日志级别配置

我们可以在配置文件中指定日志的级别,日志级别的指定是根据包名来的,也就是你指定哪个包下的级别是多少,我们现在指定我们的这个包下的日志级别为trace,在application.properties中添加配置:

logging.level.com.example = trace

重新运行测试,输出如下,说明成功设置了我们的级别:

SpringBoot起飞系列

2.2 日志存储路径

当我们写日志的时候,我们想存储到文件中,那么我们就可以设置日志的路径。

#指定目录
#logging.path=D:/
#当前运行jar包的目录
#logging.path=spring/log
#当前运行jar包的磁盘根目录
logging.path=/spring/log

三种指定路径的形式,产生的日志分别在相应的目录,一般使用logging.path=spring/log,保证在当前项目的目录产生日志,可以一个磁盘上会有多个项目。

SpringBoot起飞系列

附上一张说明,上边如果配置的logging.file或者logging.path就会写到磁盘上,如果没有就输出到控制台。

2.3 日志的输出格式

有时候我们想把日志设置一些格式,看起来方便一点,那么我们可以设置日志的格式,中间可以添加一些符号和换行之类的东西,是日志看起来更加的清晰。

#  在控制台输出的日志的格式
logging.pattern.console=%d{yyyy-MM-dd}-------- [%thread] %-5level %logger{50} -------- %msg%n
# 指定文件中日志输出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

%d:日期,{yyyy-MM-dd}表示日期的格式。

%thread:当前线程。

%level:日志级别,-5表示总共占5个字符,不足的用空格补齐。

%logger:日志记录器的类型,也就是getLogger()的参数类型。

%msg:日志内容。

%n:换行。

带%的都是一些特殊占位符,其他是就是我们添加的格式了,具体的参数可以查阅官方文档就行了。

三、总结

最简单日志使用基本就这些了,如果还需要高级的使用方法,就可以去参考官方文档了,今天我们先介绍这么多。

点赞
收藏
评论区
推荐文章
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Spring Boot(十)Logback和Log4j2集成与日志发展史
一、简介Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。<!more1.1JULJava有自己的日志框架JUL(JavaUtilLogging)在java.util.lo
Stella981 Stella981
3年前
LogBack入门实践
一、简介LogBack是一个日志框架,它是Log4j作者Ceki的又一个日志组件。LogBack,Slf4j,Log4j之间的关系  slf4j是TheSimpleLoggingFacadeforJava的简称,是一个简单日志门面抽象框架,它本身只提供了日志FacadeAPI和一个简单的日志类实现,一般常配合Lo
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Easter79 Easter79
3年前
SpringBoot起飞系列
一、SpringBoot中的日志组件日志是一个系统中不可缺少的组件。在项目中,我们常用的日志组件有JUL、JCL、Jbosslogging、logback、log4j、log4j2、slf4j....,这里边有抽象层定义,有实现层,用一张图我们来看一下:!(https://img2018.cnblogs.c
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这