日志作为逻辑跟踪、线上问题排查、监控报警的有效基础利器被开发人员所熟知。
日志框架有两个比较常用的,一个是jdk自带的java.util.logging,俗称jul;另一个是log4j,是Ceki Gülcü捐给apache的产品
1、jul
它不需要加载依赖,因为他是jdk自带的,用法如下
import java.util.logging.Logger;
public class julMain {
public static void main(String[] args){
Logger log = Logger.getLogger(julMain.class.getName());//参数是当前类的名称.class.getName
log.info("我是jul");
}
}
2、log4j
需要加载依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>-
使用方式和jul大致相同
import org.apache.log4j.Logger;
public class log4jMain {
public static void main(String[] args){
Logger logger=Logger.getLogger(log4jMain.class);
logger.info("我是log4j");
}
注:要求记录日志不能直接使用日志框架,需要使用日志门面
但是后来要求记录日志不能直接使用日志框架,需要使用日志门面,日志门面不实现日志功能,它仅仅是整合日志,提供日志接口;流行的两个日志门面是JCL(Jakarta Commons Logging由apache开发);slf4j(由Ceki Gülcü离开apache后开发)。
3、jcl
依赖
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
实现
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class julMain {
public static void main(String[] args){
Log log= LogFactory.getLog(julMain.class);
}
}
4、slf4j
依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.9</version>
</dependency>
实现
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class log4jMain {
public static void main(String[] args){
Logger logger= LoggerFactory.getLogger(log4jMain.class);
}
}
如果相同时使用两个门面,那就需要用到桥接器,引入 jcl-over-slf4j依赖即可
如今有了SpringBoot,它整合了一套日志体系
使用logback日志框架,slf4j日志门面,使用logback-classic桥接器,使用log4j-to-slf4j、jul-to-slf4j适配器。
如此,只需要创建一个spring boot的项目即可使用日志,不需要再引入任何依赖
日志级别:
trace(跟踪)<debug(调试)<info(信息)<warn(警告)<error(异常)<fatal<off
设置级别低的会输出所有高级别的日志,比如我设置日志级别为warn,那么error、fatal、off就会被记录。
spring boot默认的日志级别是info
启动springboot项目时会显示
如果需要修改日志级别就再application.yml配置文件里写入相关配置
logging:
level:
root: debug
局部修改日志级别
logging:
level:
#你的包的路径名称
com:
tx:
springboot_test: info
springboot日志输出介绍
Spring Boot 的默认日志输出类似于以下示例:
输出以下项目:
-
日期和时间:毫秒级精度,易于排序。%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){faint}
-
%clr( ){faint}设置颜色如%clr( ){yellow}
-
日志级别
-
进程 ID。
-
用于区分实际日志消息开头的分隔符。
---
-
应用程序名称:用方括号括起来(默认情况下仅在设置时记录)
spring.application.name
-
线程名称:用方括号括起来(控制台输出可能会被截断)。
-
相关 ID:如果启用了跟踪(上面的示例中未显示)
-
记录器名称:这通常是源类名称(通常缩写)。
-
日志消息
将日志以文件的形式输出:
name: 路径+文件名,如果只定义了文件名,那他的日志文件会在项目目录中,
path: 路经,path只能定义路径不能定义文件名,且如果定义了上面的name,path的路径也不会起作用,path定义路径后,会在定义的路径下生成名为spring.log的文件
logging:
file:
name: D:/spring.log #路径+文件名
# path: D:/ #路径
总结:
logging:
file:
#输出日志文件的路径名称
name: D:/log/tongxin.log
level:
#设置项目的日志级别为info
root: info
#设置再com.tx.springboot_test包下面的日志级别为debug
com:
tx:
springboot_test: debug
logback:
rollingpolicy:
#设置如果日志文件超过5kb就存档为${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz,${LOG_FILE}就是设置的file.name
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
max-file-size: 5KB
pattern:
#控制台输出格式
console: "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss}}){green} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"
#文件输出格式
file: "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss}}){green} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"