概念


以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法

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
日志管理 - 图1


每个日志框架对应的日志名字

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>