本文共 6316 字,大约阅读时间需要 21 分钟。
springboot推荐的日志类库是slf4j、日志系统为logback。slf4j有个接口叫Logger,提供了丰富的日志输出方法,包含了所有日志级别的输出。使用方式也是特别的简单,用slf4j的工厂类获取一个logger ,然后就可以输出日志了,默认情况下,日志只会输出到控制台。
package cn.com.infosec.netseal.common.core.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * web层通用数据处理 * * @author lhx */public class BaseController { protected final Logger logger = LoggerFactory.getLogger(BaseController.class);}
但是这样有一个缺点,就是要在用到的类上都写一句LoggerFactory.getLogger(),是不是很繁琐
可以集成lombok,使用@slf4j注解
org.projectlombok lombok
日志的输出路径和日志文件名由application文件指定时,需要注意application文件和logback配置文件两者的加载顺序问题
在application.properties文件中配置logging.file、logging.path可以控制日志文件的输出路径和文件名。
不过有些细节需要注意,否则配置不生效!logging.path=D:/data/myloglogging.file=mylog.log
注意windos的路径(后面配置文件中也是/),此时并不会在d盘下生成日志文件,只会在项目的根目录下创建一个myLog.log的文件(workspace中,此项目的根目录)。
其原因是,没有logback-spring.xml配置文件,系统只认识logging.file,不认识logging.path。
所以要配置logback-spring.xml,spring boot会默认加载此文件,为什么不配置logback.xml,因为logback.xml会先application.properties加载,而logback-spring.xml会后于application.properties加载,这样我们在application.properties文中设置日志文件名称和文件路径才能生效。
注意 $ {LOG_PATH}和$ {LOG_FILE}分别是获取配置文件中的路径和文件名称,必须使用这两个全局的配置去获取。
日志的输出路径和日志文件名,直接由logback配置文件指定,则配置文件名直接使用logback.xml
logback.xml会先application.properties加载,所以在logback.xml中定义日志的存放位置log.path
${console.log.pattern} utf-8 ${log.path}/sys-info.log ${log.path}/sys-info.%d{yyyy-MM-dd}.log 60 ${log.pattern} INFO ACCEPT DENY ${log.path}/sys-debug.log ${log.path}/sys-debug.%d{yyyy-MM-dd}.log 60 ${log.pattern} DEBUG ACCEPT DENY ${log.path}/sys-error.log ${log.path}/sys-error.%d{yyyy-MM-dd}.log 60 ${log.pattern} ERROR ACCEPT DENY ${log.path}/sys-user.log ${log.path}/sys-user.%d{yyyy-MM-dd}.log 60 ${log.pattern}
${console.log.pattern} utf-8 ${log.path}/info.log ${log.path}/info.%d{yyyy-MM-dd}.log 30 ${log.pattern} INFO ACCEPT DENY ${log.path}/debug.log ${log.path}/debug.%d{yyyy-MM-dd}.log 30 ${log.pattern} DEBUG ACCEPT DENY ${log.path}/error.log ${log.path}/error.%d{yyyy-MM-dd}.log 30 ${log.pattern} ERROR ACCEPT DENY
在实际应用中,上线的系统要排查问题,在界面开启dug日志可以很方便的排查。动态修改日志等级的方式有很多,描述如下:
...
上线的系统,直接修改该xml,无需重启即可完成日志等级修改。
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator
# actuate监控只开启 日志等级管理management: endpoint: loggers: enabled: true endpoints: web: exposure: include: - loggers
POST请求: http://ip:port/项目名/actuator/loggers/包路径请求体: { "configuredLevel": "DEBUG" }
可设为定时任务,根据数据库配置定时更新日志级别。
对于web项目,已经引入了spring-boot-starter-web,默认已经自带了日志的spring-boot-starter-logging,已经默认引入了logback实现,只需要配置application.yml即可。
转载地址:http://uzqgn.baihongyu.com/