市面上的日志框架
- 市面上的日志框架有以下几种:
jcl、slf4j、jboss-logging、log4j、jul、log4j2、logback
日志门面(日志抽象层) | 日志实现 |
jcl(jakarta commons logging apache jakarta小组开发的) slf4j(simple logging facade for java) jboss-logging | log4j jul(java.util.logging) log4j2 logback |
- 日志选择描述:
从上表左边选一个接口(抽象层),右边选择一个实现
jboss-logging:天生不是程序员使用的,属于特定的日志框架;jcl:最后一次更新时间2014年;slf4j:选择;log4j和logback由同一个人写;log4j有性能问题;改进版是logback;jul是java.util包中自带的日志;log4j2借log4j的名,但优于log4j,由apache开发;
综上所述,选用日志门面slf4j和日志实现logback; - spring-boot日志描述:
springboot底层是spring框架,spring框架默认是用jcl;
springboot选用slf4j和logback; - slf4j使用
开发时,日志记录方法调用不应该直接调用日志实现类,而是调日志抽象层方法
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
- slf4j框架
每一个日志的实现框架都有自己的配置文件,使用slf4j以后,配置文件还是日志实现框架的配置文件; - 日志框架使用问题
A系统开发使用日志框架:slf4j+logback;
A系统内部依赖应用框架:spring(commons-logging)、hibernate(jboss-logging)、mybatis
如何统一日志框架,使用slf4j输出 - spring-boot日志框架依赖关系
- 总结:
spring-boot底层使用的slf4j+logback;
springboot把其他日志替换成了slf4j;
中间替换包;
springboot能自动适配所有日志框架,如果我们要引入其他框架,只要且一定要把这个框架的默认日志依赖移除掉即可; - slf4j常用方法
logger使用
//日志级别,由低到高:trace<debug<info<warn<error
//可以调整输出的日志级别,只打印指定级别及更高级别的信息
logger.trace("这是日志信息。。。");//代替System.out.println();
logger.debug("debug调试日志信息");
//springboot默认使用的是info级别,若没有指定就用springboot默认规定的级别:root级别
logger.info("info日志信息");
logger.warn("warn日志信息");
logger.error("error日志");
日志级别调整:application.properties
# 设置指定包内的日志级别
logging.level.com.test.package=info
# logging.file和logging.path都不指定,那么只会输出到控制台
# logging.file指定文件名和logging.path不指定,那么如果对logging.file指定了路径,那么输出到指定路径下的springboot.log中,若至指定了文件名,那么输出到当前项目下的springbootx.log中
# logging.file不指定和logging.path指定目录,那么输出到指定目录的spring.log(spring项目默认文件名)文件中
logging.path=d:/tmp/log
logging.file=springbootx.log
logging.file=d:/tmp/springbootx.log
# 指定控制台输出的日志格式
# %d表示日期时间;
# %thread表示线程名;
# -5level表示级别从左显示5个字符宽度;
# %logger{50}全类名50个字符;
# %msg日志信息;
# %n换行;
logging.pattern.console=%d{yyyy-MM-dd} {%thread} %-5level %logger{50} - %msg%n
# 指定文件中输出的日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n
指定配置
在类路径下放上每个日志框架自己的配置文件即可:springboot就不使用默认配置了
logging system | 配置文件 |
logback | logback-spring.xml, logback-spring.groovy, logback.xml或logback.groovy |
log4j2 | log4j2-spring.xml, log4j2.xml |
jul | logging.properties |
注:logback.xml:直接被日志框架识别;
logback-spring.xml:日志框架不直接加载日志配置项,由springboot来解析日志配置,可以使用springboot的高级profile功能[如果要是用profile功能必须使用logback-spring.xml]
<springProfile name="dev">
<!-- configuration to be enabled when the "staging" profile is active -->
可以指定某段配置只在某个环境下生效
</springProfile>
<springProfile name="!dev">
<!-- configuration to be enabled when the "staging" profile is active -->
可以指定某段配置只在某个环境下生效
</springProfile>
启动命令中通过参数激活对应环境,默认环境是default
spring.profiles.active=dev
application.properties中也可以激活对应环境
spring.profiles.active=dev