一、logger的前世今生
- 最初
Apache
- logj4j 【以前的主流】 jdk
4以后也出了java.util.logging 进行争抢市场apache
又出了 common logging做兼容log4j的原作者
做了更优雅的标准 slf4j 【门面】,实现就是logback【现在比较主流,也是springboot 默认的 logger的实现】- 再log4j这个
apache
又开发了 log4j2 也类似slf4j,是一个标准。
从 排序 1-5,我们可以看到 logger 的市场的抢夺。总结来说,一共有3方公司在抢夺市场:
1、 apache 2、 java官方 或者说之前的 sun公司 3 离职apache的log4j原作者
然后,总体来说,市场上还是以 slf4j标准
为主,最重要的是他的兼容性,整合了jdk和apachede的logger的标准,各个logger基本都遵循这个标准,因此本文也主要以slf4j标准为主,你学会了slf4j标准
,基本对于logger就可以玩了转了。
二、quick start
现在java主流都是用springboot,springboot默认的都是slf4j标准,logback实现为主。
Spring Boot默认日志系统
Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。
如果要使用LogBack,原则上是需要添加dependency依赖的
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId></pre>
但是因为新建的Spring Boot
项目一般都会引用spring-boot-starter
或者spring-boot-starter-web
,而这两个起步依赖中都已经包含了对于spring-boot-starter-logging
的依赖,所以,无需额外添加依赖。
简单使用
package com.jackie.springbootdemo.config;
import com.jackie.springbootdemo.model.Person;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LogConfig {
private static final Logger LOG = LoggerFactory.getLogger(LogConfig.class);
@Bean
public Person logMethod() {
LOG.info("==========print log==========");
return new Person();
}
}
日志级别比较
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
三、浅谈配置文件及API
如何定制自己的日志格式
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
日志格式的通配符解释
这里截了一些图供 大家参考
再贴一个自己建议的
%d{yyyy/MM/dd-HH:mm:ss} [%thread] [%-5level] %logger- %msg%n
这个通配符基本是一个标准,不管你用log4j,还是logback, 以及 log4j2
都同样适用。这样标准统一也让我们节省了无畏的学习成本