目录
1.⽇志概述
1.1 ⽇志是⽤来做什么的?
1.2 为什么要⽤到⽇志框架?
1.3 现有的⽇志框架有哪些?
1.4 ⽇志⻔⾯技术
2.logback
2.1 logback介绍
2.1.1 logback 模块
2.1.2 logback 组件
2.1.3 logback 配置
2.1.4 logback.xml 配置⽂件解析
2.2 SLF4j+logback进⾏⽇志管理
2.2.2 配置⽂件
2.2.3 代码实现
2.2.6 异步⽇志
2.2.7 ⾃定义Logger
2.2.8 配置⽂件转换器
2.2.9 logback-access模块
3.Log4j2
3.1.1Log4j2介绍
3.2.1 XML配置⽂件解析
3.2.2 Log4j2的使⽤
3.2.3 Log4j的Bug及解决⽅案
4.SpringBoot⽇志管理
4.1 SpringBoot⾃定义⽇志
4.1.1 SpringBoot默认的⽇志配置
4.1.2 使⽤logback-spring.xml⾃定义配置
4.1.3 多环境输出⽇志⽂件
4.2 SpringBoot整合Log4j2
5.demo源码:Java日志模板: Java日志信息,包括slf42,logback,springboot整合slf42
System.out
${pattern}
${log_dir}/logback.log
${pattern}
${log_dir}/logback.html
%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c %M %L %thread %m
${log_dir}/roll_logback.log
${pattern}
${log_dir}/rolling.%d{yyyy-MM-dd-HH-ss}.log%i.gz
1MB
ERROR
ACCEPT
DENY
0
256
org.slf4j
slf4j-api
1.7.30
ch.qos.logback
logback-classic
1.2.3
System.out
${pattern}
${log_dir}/logback.log
${pattern}
${log_dir}/logback.html
%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c %M %L %thread %m
${log_dir}/roll_logback.log
${pattern}
${log_dir}/rolling.%d{yyyy-MM-dd-HH-ss}.log%i.gz
1MB
ERROR
ACCEPT
DENY
0
256
package com.wang;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.stream.IntStream;
/**
* @author 飞
*/
public class Test {
public static final Logger LOGGER = LoggerFactory.getLogger(Test.class);
public static void main(String[] args) {
IntStream.range(0, 10000).forEach(i -> {
LOGGER.trace("trace");
LOGGER.debug("debug"); // 默认输出级别
LOGGER.info("info");
LOGGER.warn("warn");
LOGGER.error("error");
});
}
}
${log_dir}/roll_logback.log
${pattern}
${log_dir}/rolling.%d{yyyy-MM-dd-HH-ss}.log%i.gz
1MB
ERROR
ACCEPT
DENY
0
256
status⽤来指定log4j本身的打印⽇志的级别monitorinterval为log4j 2.x新特点⾃动重载配置。指定⾃动重新配置的监测间隔时间,单位是s,最⼩是5s
Console节点⽤来定义输出到控制台的AppenderFile节点⽤来定义输出到指定位置的⽂件的AppenderRollingFile节点⽤来定义超过指定⼤⼩⾃动删除旧的创建新的的Appender
通过在⼦节点中加⼊进⾏⽇志布局:%p: 输出⽇志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,%d: 输出⽇志时间点的⽇期或时间,默认格式为ISO8601,也可以在其后指定格式,⽐如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10⽉18⽇ 22:10:28,921%r: 输出⾃应⽤启动到输出该log信息耗费的毫秒数%c: 输出⽇志信息所属的类⽬,通常就是所在类的全名%t: 输出产⽣该⽇志事件的线程名%l: 输出⽇志事件的发⽣位置,相当于%C.%M(%F:%L)的组合,包括类⽬名、发⽣的线程,以及在代码中的⾏数。举例:Testlog4.main(TestLog4.Java:10)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其⽤到像Java servlets这样的多客户多线程的应⽤中。%%: 输出⼀个”%”字符%F: 输出⽇志消息产⽣时所在的⽂件名称%L: 输出代码中的⾏号%m: 输出代码中指定的消息,产⽣的⽇志具体信息%n: 输出⼀个回⻋换⾏符,Windows平台为”\r\n”,Unix平台为”\n”输出⽇志信息换⾏
Root节点⽤来指定项⽬的根⽇志,如果没有单独指定Logger,那么就会默认使⽤该Root⽇志输出Logger节点⽤来单独指定⽇志的形式,⽐如要为指定包下的class指定不同的⽇志级别等。
org.apache.logging.log4j
log4j-api
2.19
org.apache.logging.log4j
log4j-core
2.19
package com.wang;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
public static void main(String[] args) {
for (int i= 0;i<3;i++){
// 记录trace级别的日志信息
logger.trace("log4j日志输出:This is trace message.");
// 记录debug级别的日志信息
logger.debug("log4j日志输出:This is debug message.");
// 记录info级别的日志信息
logger.info("log4j日志输出:This is info message.");
// 记录error级别的日志信息
logger.error("log4j日志输出:This is error message.");
}
}
}
格式说明时间戳,精确到毫秒: 2022-10-27 12:38:39.195logback⽇志级别.⽇志级别分为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL: INFO进程ID: 16816分割符:默认是: ---线程名称: [main]
logging.level.root= WARN
org.projectlombok
lombok
1.18.12
package com.wang.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.stream.IntStream;
/**
* @author 飞
*/
@Slf4j //lombok 提供的注解
@RestController
@RequestMapping("log")
public class LogController {
//如果不使⽤lombok就需要⽤以下代码获取⽇志操作对象
//Logger log = LoggerFactory.getLogger(LogController.class);
@GetMapping("/test")
public String test(){
IntStream.range(0, 1000).forEach(i -> {
log.trace("hello trace");
log.debug("hello debug");
log.info("hello info");
log.warn("hello warn");
});
return "SpringBoot日志管理";
}
}
logging.level.root=INFO //root⽇志以INFO级别输出信息
logging.level.com.wang.controller.config=WARN //指定config包下的类以WARN级别输出
⽇志的其它配置项logging.config ⽇志配置;logging.logback.rollingpolicy.max-file-size (低版本⽤ logging.file.max-size )最⼤⽇志⽂件⼤⼩;logging.logback.rollingpolicy.max-history (低版本 logging.file.max-history )最⼤归档⽂件数量;logging.pattern.console 控制台输出的⽇志模式;logging.pattern.dateformat ⽇志的⽇期格式;logging.pattern.file 默认使⽤⽇志模式logging.pattern.level ⽇志级别logging.config ⽇志配置;logging.logback.rollingpolicy.max-file-size (低版本⽤logging.file.max-size )最⼤⽇志⽂件⼤⼩;logging.logback.rollingpolicy.max-history (低版本 logging.file.max-history )最⼤归档⽂件数量;logging.pattern.console 控制台输出的⽇志模式;logging.pattern.dateformat ⽇志的⽇期格式;logging.pattern.file 默认使⽤⽇志模式logging.pattern.level ⽇志级别
System.out
${pattern}
${log_dir}/logback.log
${pattern}
${log_dir}/logback.html
%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c %M
%L %thread %m
${log_dir}/roll_logback.log
${pattern}
${log_dir}/rolling.%d{yyyy-MM-dd-HHss}.log%i.gz
1MB
ERROR
ACCEPT
DENY
0
256
java -jar xxx.jar –spring.profiles.active=prod
1.pom配置
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-logging
2.7.5
org.springframework.boot
spring-boot-starter-log4j2
1.4.7.RELEASE
org.projectlombok
lombok
1.18.20
2. 配置⽂件
logging.config=xxx.xml