在 java 日志记录中,使用 loggerfactory.getlogger() 的核心做法是传入一个类对象或类名字符串来获取对应的 logger 实例。通常推荐传入当前类的 this.getclass() 或 classname.class,这样能确保日志输出时包含准确的类名信息,便于追踪日志来源。

如何获取特定类的 Logger 实例
直接调用 LoggerFactory.getLogger(YourClass.class) 即可获取该类的 Logger。这样做的好处是 Logger 的名称(Name)会自动设置为该类的全限定名,符合大多数日志框架(如 Logback、Log4j2)的层级命名规范。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void createUser(String name) {
if (name == null || name.isEmpty()) {
logger.warn("User name cannot be empty");
return;
}
logger.info("Creating user: {}", name);
// ... business logic
}
}
上述代码展示了标准的用法。首先定义静态常量 logger,避免每次方法调用都重新获取实例,提升性能。在 createUser 方法中,当输入为空时,通过 logger.warn 记录警告;正常流程则通过 logger.info 记录信息,并使用占位符 {} 进行参数绑定,避免字符串拼接开销。
Logger 名称与配置文件匹配规则
Logger 的名称决定了它在日志配置文件中的匹配行为。如果配置文件中定义了 ,那么通过 getLogger(UserService.class) 获取的实例将应用此配置。若未显式配置,Logger 会继承其父 Logger(通常是根 Logger )的设置。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OrderService {
private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
public void processOrder(int orderId) {
if (orderId <p>在 <code>OrderService</code> 中,我们处理订单 ID 的有效性检查。当 ID 无效时,记录错误并抛出异常;正常处理时记录调试信息。这种基于类名的 Logger 获取方式,使得在 <code>logback.xml</code> 或 <code>log4j2.xml</code> 中可以精确控制不同模块的日志级别,例如对 <code>UserService</code> 开启 INFO,而对 <code>OrderService</code> 开启 DEBUG,互不干扰。</p><h2>当 Logger 名称包含包路径时如何过滤日志</h2><p>由于 <code>getLogger(Class)</code> 生成的名称包含完整包路径,可以通过配置特定包级别的 Logger 来过滤日志。例如,若只想记录 <code>com.example.service</code> 包下的 WARN 及以上级别日志,可配置 <code><logger name="com.example.service" level="WARN"></logger></code>。这将影响该包下所有类通过 <code>getLogger</code> 获取的 Logger 实例,实现细粒度的日志控制。</p>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











