日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节。但是,这丝毫不影响它在任何一个系统中的重要的地位。

为了保证服务的高可用,发现问题一定要即使,解决问题一定要迅速,所以生产环境一旦出现问题,预警系统就会通过邮件、短信甚至电话的方式实施多维轰炸模式,确保相关负责人不错过每一个可能的bug。

预警系统判断疑似bug大部分源于日志。比如某个微服务接口由于各种原因导致频繁调用出错,此时调用端会捕获这样的异常并打印ERROR级别的日志,当该错误日志达到一定次数出现的时候,就会触发报警。


try {调用某服务} catch(Exception e) {LOG.error("错误信息", e);}

所以日志至关重要,这篇就来介绍下在Spring Boot如何配置日志。

Spring Boot默认日志系统

Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。

如果要使用LogBack,原则上是需要添加dependency依赖的


<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId></pre>

但是因为新建的Spring Boot项目一般都会引用spring-boot-starter或者spring-boot-starter-web,而这两个起步依赖中都已经包含了对于spring-boot-starter-logging的依赖,所以,无需额外添加依赖。

我们基于《没做过大项目,但我会建大项目》中创建的项目,启动springboot-demo项目,可以看到打印的日志信息如下。

以上至默认配置启动下的日志显示情况,如果需要做一些定制的日志配置比如将日志存储到文件等应该如何配置,下面就通过几个小问题来看看Spring Boot下是如何解决这些问题的。

如何在项目中打印日志

新建一个配置类LogConfig,注入一个Bean,并在方法中打印日志


package com.jackie.springbootdemo.config;import com.jackie.springbootdemo.model.Person;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration public class LogConfig {private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);@Beanpublic Person logMethod() {LOG.info("==========print log==========");return new Person();}
}

运行SpringBootDemoApplication,可以看到控制台的日志

Spring Boot默认的日志级别为INFO,这里打印的是INFO级别的日志所以可以显示。

很多开发者在日常写private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);总觉得后面的LogConfig.class可有可无,因为随便写个其他类也不会报错,但是准确编写class信息能够提供快速定位日志的效率。

我们看到打印的日志内容左侧就是对应的类名称,这个是通过private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);实现的。

如果将LogConfig.class换成xxx.class,输出日志就会显示对应的xxx类名。这样声明的好处就是方便定位日志。

如何将日志信息存储到文件

在本机环境,我们习惯在控制台看日志,但是线上我们还是要通过将日志信息保存到日志文件中,查询日志文件即可。

那么应该如何配置才能将日志信息保存到文件呢?

在我们创建的springboot-demo项目中,resources目录下有个application.properties文件(如果是application.yml文件也是同样的道理,只是采用的不同的编写风格而已)。添加如下配置


logging.path=/Users/jackie/workspace/rome/
logging.file=springbootdemo.log

logging.path

该属性用来配置日志文件的路径

logging.file

该属性用来配置日志文件名,如果该属性不配置,默认文件名为spring.log

path与file二者不能同时使用,如若同时使用,则只有logging.file生效

运行SpringBootDemoApplication

可以看到在指定路径下生成了springbootdemo.log文件,该文件内容和控制台打印内容一致。

如果注释logging.file=springbootdemo.log则生成默认文件名spring.log

如何设置日志级别

日志级别总共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且级别是逐渐提供,如果日志级别设置为INFO,则意味TRACE和DEBUG级别的日志都看不到。

上例中我们打印了一个INFO级别的日志,因为Spring Boot默认级别就是INFO,如果我们改为WARN,是否还能看到这行日志信息。

logging.level

该属性用于配置日志级别。

在applicaition.properties中添加


logging.level.root=warn

这里是用的root级别,即项目的所有日志,我们也可以使用package级别,即指定包下使用相应的日志级别,下面再看。

启动SpringBootDemoApplication

你没看错,这个项目是成功启动了,但是几乎没有内容,这是因为之前打印的日志级别都是INFO,这里设置为WARN,所以INFO级别的日志都不显示。

这里我们可以改动root还是INFO级别,将指定包下的日志级别设置为WARN


logging.level.root=INFOlogging.level.com.jackie.springbootdemo.config=WARN

启动SpringBootDemoApplication

可以看到除了LogConfig类中的INFO级别的日志没有打印出来,其他的INFO级别的日志都正常输出了。

如何定制自己的日志格式

在application.properties中添加


logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n

logging.pattern.console

该属性用于定制日志输出格式。

上述配置的编码中,对应符号的含义如下


%d{HH:mm:ss.SSS}——日志输出时间%thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用%-5level——日志级别,并且使用5个字符靠左对齐%logger- ——日志输出者的名字%msg——日志消息%n——平台的换行符

启动SpringBootDemoApplication

转载自:http://www.cnblogs.com/bigdataZJ/p/springboot-log.html

Spring Boot系列——日志配置相关推荐

  1. springboot跳转html_畅游Spring Boot系列 — 自定义配置

    这里要说的自定义配置主要是两类:一类是关于Spring MVC的扩展配置,一类是Spring Boot自身通过配置文件的自定义配置 首先,我们来看一下SpringBoot中关于Spring MVC的相 ...

  2. Spring boot指定日志配置

    指定日志配置 给类路径下,放上每个日志框架,自己的配置文件即可 SpringBoot就不使用,默认配置的了 Spring文件名区别 logback.xml 直接就被日志框架识别了 logback-sp ...

  3. Spring boot 系列 入门--配置

    简介 Spring Boot 并不是一个全新的框架,而是将已有的 Spring 组件整合起来.特点是去掉了繁琐的 XML 配置,改使用约定或注解.所以熟悉了 Spring Boot 之后,开发效率将会 ...

  4. Spring boot默认日志配置

    默认日志配置 查看依赖包 Logging Base.xml 基本配置 Defaults.xml 默认配置

  5. Spring boot 默认日志配置

    #\u914D\u7F6E\u65E5\u5FD7 logging.level.root=INFO logging.level.org.springframework.web=DEBUG loggin ...

  6. Spring Boot 系列:过滤器+拦截器+监听器

    原 Swagger 文章合并到 Spring Boot 系列:配置 Swagger2 一.过滤器 - Filter 过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请 ...

  7. spring boot—默认日志框架配置

    文章目录 默认日志框架--配置全解 日志格式 日志级别 日志输出到控制台 日志输出到文件 spring boot2.2.4官方文档 默认日志框架–配置全解 #日志记录 logging:#日志级别lev ...

  8. Spring Boot 集成 Apollo 配置中心,真香、真强大!

    作者:超级小豆丁 来源:http://www.mydlq.club/article/42/ 由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用. 1.背景 随着程序 ...

  9. 【小马哥】Spring Boot系列讲座

    这里推荐一个不错的Spring Boot系列讲座,讲师简介如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师.目前主要负责微服务技术推广.架构设计.基础设施.迁移等. ...

  10. java 微服务实践 视频,全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程...

    全新JAVA微服为务实战Spring Boot系列视频教程 小马哥 JAVA微服务实践视频课程 ===============课程目录=============== ├─(1) 03Java 微服务实 ...

最新文章

  1. python简单代码画皮卡丘-实现童年宝可梦,教你用Python画一只属于自己的皮卡丘...
  2. Qt控制台工程不能调试问题
  3. freeRtos学习笔记 (5)事件组
  4. php 连接oracle插入多张图片的方法
  5. Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
  6. Andrew Ng深度学习课程笔记
  7. H3C 帧中继初级配置(二)
  8. 苹果正式推送iPadOS 13.1、iOS 13.1,修复大量Bug,速升!
  9. LivePlayer.js免费直播、点播播放器如何自适应div宽高集成播放视频
  10. virtualbox 桥接模式下虚拟机ping不通网关
  11. vue.js能美化界面吗_美牙真的能变美吗?刘涛花百万美化牙齿,容貌大变样,网友:太神奇了吧...
  12. c#语言程序设计pdf,C#程序设计及应用教程(第2版)
  13. JAVA开发环境搭建
  14. 中兴C93E全光网配置
  15. Win10真正好用之处
  16. IntelliJ Keymap
  17. mysql binlog events_使用SHOW binlog events查看binlog内容
  18. MySQL百万级压测数据表
  19. 什么是你的核心竞争力之三?
  20. PostgreSQL V10逻辑复制

热门文章

  1. windows部署tensorflow serving
  2. es 多索引联合查询_ES 的跨索引查询详细讲解
  3. 一元三次方程求解matlab_浅谈三次函数的性质及其在高考中的应用
  4. C语言踢出字符,《懂球堂》| 大写的C字!如何踢出C罗一样的任意球
  5. 2022牛客寒假算法基础集训营2
  6. Android怎么设置快捷键,Android Studio的快捷键设置方法
  7. timenote时光笔记+android,Time Note时光笔记软件怎么样?Time Note时光笔记有哪些功能特色?...
  8. 计算机视觉、机器学习、深度学习相关开源代码集合归纳总结(二)(收藏用)
  9. warning: array subscript has type ‘char‘
  10. 李华明Himi浅谈游戏开发de自学历程!(仅供参考)