SpringBoot系列之日志框架使用教程

Easter79
• 阅读 557

基于上篇博客,SpringBoot系列之日志框架介绍及其原理简介博客之后,本博客可以对日志框架的具体使用做一个比较详细的描述,以此作为一篇使用的手册,以此帮助学习Springboot者

@[toc]

1、SpringBoot日志级别

1)、日志级别简介

简介一下日志级别,按照从低到高排序:trace < debug < info < warn < error,eg:假如日志级别为info,则只会打印info级别及其高级别的日志,所以在项目中,可以通过调高日志级别,打少点日志,反之,想打多点就调低日志级别

2)、默认日志级别

Springboot支持的日志级别有:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, or OFF,然后默认的级别是info,写一个简单的测试类验证这个问题:

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLoggerApplicationTests {

    Logger LOG = LoggerFactory.getLogger(this.getClass());

    @Test
    void contextLoads() {
        LOG.trace("this is trace log infomation....");
        LOG.debug("this is debug log infomation....");
        LOG.info("this is info log infomation....");
        LOG.warn("this is warn log infomation....");
        LOG.error("this is error log infomation....");
    }

}

日志打印:

2019-11-16 18:50:07.513  INFO 19152 --- [           main] c.e.s.s.SpringbootLoggerApplicationTests : this is info log infomation....
2019-11-16 18:50:07.513  WARN 19152 --- [           main] c.e.s.s.SpringbootLoggerApplicationTests : this is warn log infomation....
2019-11-16 18:50:07.513 ERROR 19152 --- [           main] c.e.s.s.SpringbootLoggerApplicationTests : this is error log infomation....

可以看出只打印了info及其高级别的日志,可是我们并没有配置什么,说明了Springboot已经做了自动配置,默认日志级别为info的

3)、配置日志级别

Springboot日志级别可以设置root根级的,也可以设置对应包下面的日志级别,如下示例:

# root日志级别为info
logging.level.root=info
# 指定org.springframework.web包级别为debug
logging.level.org.springframework.web=debug
# 指定org.hibernate包级别为error
logging.level.org.hibernate=error
# 指定com.example.springboot.springbootlogger包下面的统一用debug级别
logging.level.com.example.springboot.springbootlogger=debug

4)、日志分组设置

Springboot还提供了日志级别进行分组设置的功能,官方说法是“能够将相关记录器组合在一起,以便可以同时配置它们,这通常很有用。例如,您通常可以更改所有 Tomcat 相关记录器的日志记录级别,但您无法轻松记住顶级包。”,意思就是我们可以自己定义一个分组,然后自己设置整个分组的级别,主要原因是我们很难记得那些包名

# 日志分组设置
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
# 设置整个组的级别为trace
logging.level.tomcat=TRACE

Springboot已经有的分组,没有的分组就得自己设置 |Name| loggers | |--|--| | web | org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans| |sql |org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener|

2、SpringBoot日志格式设置

1)、默认格式原理简介

从前面的学习可以知道,Springboot默认使用logback进行日志打印的,所以可以在Springboot的jar包里找到默认的日志格式配置org.springframework.book.logging.logback的包下面找到default.xml,也就是我们不在application.properties配置的话,就加载默认的格式 SpringBoot系列之日志框架使用教程

2)、默认日志格式

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
  • 日期和时间:毫秒精度,易于排序。
  • 日志级别:错误、警告、信息、调试或跟踪。
  • 进程 ID。
  • 分隔符,用于区分实际日志消息的开头。
  • 线程名称:以方形括号括起来(控制台输出可能截断)。
  • 记录器名称:这通常是源类名称(通常缩写)。
  • 日志消息。

3)、自定义日志格式

application.perperties也可以加上自己的自定义配置,本博客使用boot2.2.1

# 定义控制台日志打印格式
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:日期;
  • %thread:线程名;
  • %-5level:日志级别从左显示5个字符长度,列如:DEBUG;
  • %logger{50}:java类名,例如:com.muses.taoshop.MyTest,50表示字符长度;
  • %msg:日志内容;%n:换行

4)、日志颜色设置

对于在控制台打印的日志,还可以加上必要的颜色,具体用法是开启spring.output.ansi.enabled,ANSI配置可以参考官方文档:https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/api//org/springframework/boot/ansi/AnsiOutput.Enabled.html

其实主要如下属性:

  • ALWAYS:启用ANSI彩色输出。
  • DETECT:尝试检测ANSI着色功能是否可用。
  • NEVER:禁用ANSI彩色输出。

application.properties开启

spring.output.ansi.enabled=always

具体用法是%clr(${param}){color}

logging.pattern.console=%clr(%d{yyyy-MM-dd HH24:mm:ss.SSS}){green} {%thread} %-5level %logger{50} - %msg%n

SpringBoot系列之日志框架使用教程

Springboot支持的颜色有:

  • blue
  • cyan
  • faint
  • green
  • magenta
  • red
  • yellow

3、日志文件归档

而对于日志归档文件的,我们也可以通过源码看到默认配置为10M的,也就是文件超过10M就自动进行归档,不需要我们自己配置 SpringBoot系列之日志框架使用教程

SpringBoot系列之日志框架使用教程 也可以在application.properties加上默认的配置

# 可以指定目录,也可以不指定,不指定的情况就在项目根目录下面创建日志文件
logging.file.name=springboot.log
# window系统在当前项目的磁盘根目录创建springboot/log文件夹,默认日志文件是spring.log
#logging.file.path=/springboot/log

logging.file.name=springboot.log,可以指定目录,也可以不指定,不指定的情况就在项目根目录下面创建日志文件 logging.file.path=/springboot/log,window系统在当前项目的磁盘根目录创建springboot/log文件夹,默认日志文件是spring.log

4、logging其它参数配置

对于Springboot怎么配置日志参数,具体可以参考Springboot官网,引用官网的logging配置,官网链接:https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/spring-boot-features.html#boot-features-logging SpringBoot系列之日志框架使用教程

5、开启日志调试模式

启用调试模式后,将配置一系列核心记录器(embedded container, Hibernate, and Spring Boot)以输出更多信息。启用调试模式不会将应用程序配置为使用 DEBUG 级别,记录所有消息。

$ java -jar myapp.jar --debug

当然也可以在配置文件库开启,将debug设置为TRUE就可以

debug=true

ok,本博客只是对日志框架的基本使用进行介绍,详细的比如自定义logback配置等等,请参考我这个专栏的系列博客:https://smilenicky.blog.csdn.net/category_9195353.html

附录: logging manual:SpringBoot日志官方手册 example source:日志配置github代码下载链接

点赞
收藏
评论区
推荐文章
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中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
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 )
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
3年前
Spring Boot日志集成
!(https://oscimg.oschina.net/oscnet/1bde8e8d00e848be8b84e9d1d44c9e5c.jpg)SpringBoot日志框架SpringBoot支持JavaUtilLogging,Log4j2,Lockback作为日志框架,如果你使用star
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
SpringBoot系列之日志框架使用教程
基于上篇博客,SpringBoot系列之日志框架介绍及其原理简介(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fsmilenicky.blog.csdn.net%2Farticle%2Fdetails%2F103082396)博客之后,本博客可以对日志框架的具体使用做一个比较详细的描述
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k