标签:缺点 日志输出 日志 信息 public faq 不能 static pack
slf4j是为了便于不同日志框架的切换,而设计的日志系统门面,它支持的日志框架包括:java.util.logging, logback and log4j.它的使用很简单,只需要引入slf4j-api-${project.version}.jar即可,但实际项目中它需要配合相应的日志框架使用.这里只是简单介绍一下slf4j的引用.
1 使用slf4j需要的maven依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
2 引入maven依赖后需要在需要日志输出的类引入Logger
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
示例代码:
package com.liu;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
public class HelloWorld {
final static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public static void main(String[] args) {
logger.info("Hello World");
}
}
执行结果:
由于只有slf4j门面,无法输出具体的日志信息,只有对于的加载信息
如果想看到输出结果,引入门面后的具体日志框架即可,这里使用slf4j-simple作为示例:
maven依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
执行结果:
[main] INFO com.liu.HelloWorld - Hello World
3 引入Logger有三种方式
a.类实例变量
public class HelloWorld {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
}
b.静态变量
public class HelloWorld {
final static Logger logger = LoggerFactory.getLogger(HelloWorld.class);
}
因为不同类之间使用Logger都需要粘贴复制,同时修改映射的Logger名称,使用MethodHandles.lookup().lookupClass()方法可以获取到对应的类的class.
即: final static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
c.lombok注解(这种也是静态变量方式,只是看着更简洁一些,它需要引入lombok依赖)
@Slf4j
public class HelloWorld {
}
<dependency>
???<groupId>org.projectlombok</groupId>
???<artifactId>lombok</artifactId>
???<version>1.16.16</version>
</dependency>
4 干货
前面说的都是基本用法,这里主要想说一下Logger引入方式中,官方之前是推荐使用静态变量方式的,但是现在根据情况有所区别:
a.静态变量方式
优点: 应用内共用;省CPU,主类初始化时,只需要一次分配;省内存;
缺点:1. 在应用间共享库,不能发挥仓库选择器优势.如果SLF4J绑定和底层API附带每一个应用(不在应用间分享),那么每个应用仍将有自己的日志环境。2.IOC不友善
b.实例变量方式
优点:当底层日志系统是logback-classic时,可发挥仓库选择器的优势,甚至应用间的共享库.
缺点:耗CPU;耗内存
参考资料:
slf4j官方对于相关问题解释 http://www.slf4j.org/faq.html
slf4j官方对于相关问题解释翻译 https://yq.aliyun.com/articles/86347
@Slf4j注解 https://projectlombok.org/api/lombok/extern/slf4j/Slf4j.html
@Slf4j注解作用 https://www.jianshu.com/p/6e137ee836a1
lombok日志相关注解及其作用 https://projectlombok.org/features/log
标签:缺点 日志输出 日志 信息 public faq 不能 static pack
原文地址:https://www.cnblogs.com/chengmuyu/p/12969484.html