private static Logger logger =Logger.getLogger(AssembleMsgService.class)什么意思?

Log4j入门:理解AssembleMsgService中的Logger用法及配置
本文解析了如何在AssembleMsgService中使用Log4j日志记录器,介绍了Logger初始化、日志级别设置和类路径标识的重要性,以及与System.out.println的区别。重点讲解了Logger.getLogger()方法和配置默认日志行为。

作为一个新人中的菜鸡,最近在看一个项目的代码其中有这么一段看得我很是费解

public class AssembleMsgService {
	private static Logger logger = Logger.getLogger(AssembleMsgService.class);

1、Logger logger = logger.getlogger();

看到这个会想到这是log4j下的一个方法,log4j是一个开源项目,通过在项目中使用Log4J我们可以控制日志信息输出到控制台、文件、GUI组件、数据库等,可以通过定义输出级别控制日志的输出过程,方便项目调试。

所以看到Logger就应该想到(日志记录器)

相比较于System.out.println()方法来调试一段代码,如果有众多控制台的话输出会降低应用性能,于是用Log4J会好很多。

在使用这个方法的时候只需要向上面那样在每个类下直接声明一个私有属性就可以了
但是有一点很麻烦,就是每次在使用logger中的时候都要重复声明上面Logger的对象

1、1日志级别

既然是控制日志输出,那么也应该有对应的级别

Log4J在org.apache.log4j.Level类中定义了OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL其中级别具体含义我就不一一述说了可自行查阅相关文档
优先级为ERROR>WARN>INFO>DEBUG

给来一个代码演示:

import java.util.logging.Level;
import java.util.logging.Logger;

public class Test {
    public static void main(String[] args) {
        Logger logger = Logger.getLogger(Test.class);

        BasicConfigurator.configure();
        logger.setLevel(Level.ALL);
    }
}

通过 Logger.getLogger(Test.class) 创建 Logger 实例,然后调用 BasicConfigurator.configure() 方法指定该 Logger 使用默认的配置信息,接着调用
looger.setLevel(Level.ALL) 设置 Logger 的日志输出级别为 ALL

这里面的BasicConfigurator.configure() 方法指定该 Logger 使用默认的配置信息,不是说一定要这样,我是因为项目中没有Log4J的配置文件需要导入,所以必须得标记下设置默认路径

2、(AssembleMsgService.class)是什么意思?

看到.class后缀名第一时间想到的是编译文件,我们的java文件在编写好之后通过编译得到一个可执行文件.class文件

上面讲到了一个概念叫日志输出。在一个项目中日志得作用是无可厚非的,所以控制好一个日志对于测试人员查找BUG以及优化代码等有着很大的帮助
因为Logger.getLogger方法需要传入Class类型对象,这样该logger的信息中会详细体现出是哪个路径的哪个类的日志

Logger logger = logger.getlogger(AssembleMsgService.class)
的作用就是打印输出AssembleMsgService这个类的日志信息到控制台

Java 开发中,日志记录是一个重要的调试和监控工具。为了在类中使用 `LoggerFactory` 获取日志记录器实例,通常会使用如下方式: 每个类都会在类体的最开始声明一个 `Logger` 实例,例如: ```java protected static final Logger logger = LoggerFactory.getLogger(XXX.class); ``` 此代码的目的是通过指定的类 `XXX` 初始化日志记录器实例,以便在日志输出时,可以清晰地标识日志信息所属的类。例如,如果类名为 `XYZ`,则日志输出可能类似于: ``` XYZ : hello world ``` 这种写法允许开发者通过日志快速定位问题发生的类上下文,从而提高调试效率 [^4]。 ### 使用 getClass() 除了直接使用类名作为参数,也可以通过 `getClass()` 方法获取运行时类的日志记录器实例: ```java protected Logger logger = LoggerFactory.getLogger(getClass()); ``` `getClass()` 是 `java.lang.Object` 中定义的方法,它返回调用对象的实际运行时类。这种方式在某些场景下更为灵活,尤其是在基类或抽象类中定义日志记录器时非常有用 [^3]。 ### 使用 SLF4J 注解简化日志记录器初始化 为了减少重复代码和避免错误,例如复制代码时忘记修改 `.class` 参数,可以使用 SLF4J 提供的注解来简化日志记录器的初始化过程。例如: ```java import lombok.extern.slf4j.Slf4j; @Slf4j public class LogExample { // 不需要手动声明 logger 实例 // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); } ``` 当使用 `@Slf4j` 注解时,Lombok 会自动生成一个名为 `log` 的静态日志记录器实例,从而减少样板代码并避免常见的错误 [^2]。 ### 示例 以下是一个完整的示例,展示如何在类中使用 `LoggerFactory` 获取 `Logger` 实例并记录日志信息: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class XYZ { protected static final Logger logger = LoggerFactory.getLogger(XYZ.class); public void exampleMethod() { logger.debug("hello world"); } } ``` 当调用 `exampleMethod()` 时,日志输出将包含类名 `XYZ` 和日志信息,例如: ``` XYZ : hello world ``` 这种写法确保了日志信息的可读性和可维护性 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值