概念
以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法
SpringBoot内部日志默认实现是Logback
默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。
spring-boot-starter-logging 起步依赖里面的是logback和slf4j ,,所以SpringBoot默认是slf4j和logback
1.最全使用说明参考
https://www.yuque.com/docs/share/bee4c3a0-011f-4606-bff5-3cf9d1eccad3?#
2.log4J使用
起步依赖
排除原来框架的logging
如果要引入了其它的框架,一定要把这个框架的默认日志依赖移除掉.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> |
---|
3.日志级别
日志级别有什么用?
SpringBoot框架 可以调整需要输出的级别,比如项目上线了,debug级别我不想要,就可以调整日志级别,然后日志就输出这个调整后的级别以及比它更高的级别输出.
SpringBoot默认输入info warn error 级别的 ,其它级别需要自己设置
日志级别由低到高: trace
常用的是这是三个:
info 一般处理业务逻辑的时候使用,就跟 system.err打印一样,用于说明此处是干什么的。slf4j使用的时候是可以动态的传参的,使用占位符 {} 。后边一次加参数,会挨个对应进去。
debug: 一般放于程序的某个关键点的地方,用于打印一个变量值或者一个方法返回的信息之类的信息
error: 用户程序报错,必须解决的时候使用此级别打印日志。
不常用的有:
warn:警告,不会影响程序的运行,但是值得注意。
trane: 一般不会使用,在日志里边也不会打印出来,好像是很低的一个日志级别。
//记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() { //日志的级别; //由低到高 trace logger.trace(“这是trace日志…”); logger.debug(“这是debug日志…”); //SpringBoot默认给我们使用的是info级别的,没有指定级别的就用SpringBoot默认规定的级别;root级别 logger.info(“这是info日志…”); logger.warn(“这是warn日志…”); logger.error(“这是error日志…”); } |
---|
yml配置日志级别
logging: level: # com.日志管理: trace # 前面是包名 com.*: debug # com包下的所有类都是这个级别的 |
---|
级别控制
在Spring Boot中只需要在application.properties中进行配置完成日志记录的级别控制。
配置格式:logging.level.=LEVEL
logging.level:日志级别控制前缀,为包名或Logger名
LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
举例:
logging.level.com.didispace=DEBUG:com.didispace包下所有class以DEBUG级别输出
logging.level.root=WARN:root日志以WARN级别输出
日志输入到项目文件夹下
Spring Boot默认配置只会输出到控制台,并不会记录到文件中,但是我们通常生产环境使用时都需要以文件方式记录。
若要增加文件输出,需要在application.properties中配置logging.file或logging.path属性。
logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
日志文件会在10Mb大小的时候被截断,产生新的日志文件,默认级别为:ERROR、WARN、INFO
需要注意logging.file 和logging.path 两个是冲突配置,只能选择其一来使用,不能同时使用.
如果两个同时指定,是logging.file起作用.
yml配置一下
logging:
level.root: info
file: ./logs/chuanjiabaoPc.log
意思是在当前项目根目录下的logs文件夹下生成一个 chuanjiabaoPc.log 的文件
logging: level: com.日志管理: trace # 前面是包名 # file: zjj_SpringBoot.log # 当前项目下生成日志文件 file: D:/zjj_SpringBoot.log # 指定D盘生成日志文件 |
---|
logging: level: com.日志管理: trace # 前面是包名 path: D:/Spring/log/ # 指定在D盘的Spring文件夹的log文件夹下生成文件,(注意和logging.file冲突,注意不能指定文件名) |
---|
日志输出格式
在控制台输出的日志的格式 logging.pattern.console
指定文件中日志输出的格式 logging.pattern.file
# 日志级别设置 logging: path: D:/Spring/log/ # 指定在D盘的Spring文件夹的log文件夹下生成文件,(注意和logging.file冲突,注意不能指定文件名) pattern: # 指定在控制台输入的日志格式 console: “%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n” # 需要用双引号包裹起来 # 指定在文件中的日志输出格式 file: “%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n” # 需要用双引号包裹起来 level: com.日志管理: trace # 前面是包名 |
---|
%d表示日期时间,
%thread表示线程名,
%-5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
4.xml配置
logback-spring.xml |
---|
每个日志框架对应的日志名字
Logging System | Customization |
---|---|
Logback | logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy |
Log4j2 | log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) | logging.properties |
直接找个配置文件放在类路径下就行了,就可以被框架识别了
logback.xml:直接就被日志框架识别了;
建议用logback-spring.xml:日志框架就不直接加载日志的配置项,由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能
如果是别的配置文件也要带上-spring, 比如log4j2-spring.xml
dev环境这么输出,不是dev环境那么输出
<springProfile name=”dev”> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ——> [%thread] —-> %-5level %logger{50} - %msg%n</pattern> </springProfile><springProfile name=”!dev”> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern> </springProfile> |
---|