wordpress建站vip全站教程,国内使用vue做的网站,找兼职做酒店网站,最全的域名后缀日志#xff0c;通常不会在需求阶段作为一个功能单独提出来#xff0c;也不会在产品方案中看到它的细节。但是#xff0c;这丝毫不影响它在任何一个系统中的重要的地位。
为了保证服务的高可用#xff0c;发现问题一定要即使#xff0c;解决问题一定要迅速#xff0c;所…日志通常不会在需求阶段作为一个功能单独提出来也不会在产品方案中看到它的细节。但是这丝毫不影响它在任何一个系统中的重要的地位。
为了保证服务的高可用发现问题一定要即使解决问题一定要迅速所以生产环境一旦出现问题预警系统就会通过邮件、短信甚至电话的方式实施多维轰炸模式确保相关负责人不错过每一个可能的bug。
预警系统判断疑似bug大部分源于日志。比如某个微服务接口由于各种原因导致频繁调用出错此时调用端会捕获这样的异常并打印ERROR级别的日志当该错误日志达到一定次数出现的时候就会触发报警。
try {调用某服务} catch(Exception e) {LOG.error(错误信息, e);}所以日志至关重要这篇就来介绍下在Spring Boot如何配置日志。
Spring Boot默认日志系统
Spring Boot默认使用LogBack日志系统如果不需要更改为其他日志系统如Log4j2等则无需多余的配置LogBack默认将日志打印到控制台上。
如果要使用LogBack原则上是需要添加dependency依赖的
groupIdorg.springframework.boot/groupId
artifactIdspring-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.filespringbootdemo.loglogging.path
该属性用来配置日志文件的路径
logging.file
该属性用来配置日志文件名如果该属性不配置默认文件名为spring.log
运行SpringBootDemoApplication 可以看到在指定路径下生成了springbootdemo.log文件该文件内容和控制台打印内容一致。
如果注释logging.filespringbootdemo.log则生成默认文件名spring.log 如何设置日志级别
日志级别总共有TRACE DEBUG INFO WARN ERROR FATAL 且级别是逐渐提供如果日志级别设置为INFO则意味TRACE和DEBUG级别的日志都看不到。
上例中我们打印了一个INFO级别的日志因为Spring Boot默认级别就是INFO如果我们改为WARN是否还能看到这行日志信息。
logging.level
该属性用于配置日志级别。
在applicaition.properties中添加
logging.level.rootwarn这里是用的root级别即项目的所有日志我们也可以使用package级别即指定包下使用相应的日志级别下面再看。
启动SpringBootDemoApplication 你没看错这个项目是成功启动了但是几乎没有内容这是因为之前打印的日志级别都是INFO这里设置为WARN所以INFO级别的日志都不显示。
这里我们可以改动root还是INFO级别将指定包下的日志级别设置为WARN
logging.level.rootINFOlogging.level.com.jackie.springbootdemo.configWARN启动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%nlogging.pattern.console
该属性用于定制日志输出格式。
上述配置的编码中对应符号的含义如下
%d{HH:mm:ss.SSS}——日志输出时间%thread——输出日志的进程名字这在Web应用以及异步任务处理中很有用%-5level——日志级别并且使用5个字符靠左对齐%logger- ——日志输出者的名字%msg——日志消息%n——平台的换行符启动SpringBootDemoApplication