slf4j导入那个依赖_slf4j日志引用正确姿势

slf4j是为了便于不同日志框架的切换,而设计的日志系统门面,它支持的日志框架包括:java.util.logging, logback and log4j.它的使用很简单,只需要引入slf4j-api-${project.version}.jar即可,但实际项目中它需要配合相应的日志框架使用.这里只是简单介绍一下slf4j的引用.

1 使用slf4j需要的maven依赖

org.slf4j

slf4j-api

2.0.0-alpha1

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依赖:

org.slf4j

slf4j-simple

2.0.0-alpha1

执行结果:

[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 {

}

org.projectlombok

lombok

1.16.16

4 干货

前面说的都是基本用法,这里主要想说一下Logger引入方式中,官方之前是推荐使用静态变量方式的,但是现在根据情况有所区别:

a.静态变量方式

优点: 应用内共用;省CPU,主类初始化时,只需要一次分配;省内存;

缺点:1. 在应用间共享库,不能发挥仓库选择器优势.如果SLF4J绑定和底层API附带每一个应用(不在应用间分享),那么每个应用仍将有自己的日志环境。2.IOC不友善

b.实例变量方式

优点:当底层日志系统是logback-classic时,可发挥仓库选择器的优势,甚至应用间的共享库.

缺点:耗CPU;耗内存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值