使用Commons Logging
约 535 字大约 2 分钟
2025-07-15
Commons Logging 是一个由 Apache 创建的第三方日志库,可以挂接不同的日志系统,并通过配置文件指定。默认情况下,Commons Logging 自动搜索并使用 Log4j,如果没有找到 Log4j,则使用 JDK Logging。
8.1 使用步骤
- 通过
LogFactory
获取Log
类的实例。 - 使用
Log
实例的方法打日志。
下面是一个使用示例:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Main {
public static void main(String[] args) {
Log log = LogFactory.getLog(Main.class);
log.info("start...");
log.warn("end.");
}
}
上述代码展示了如何使用 Commons Logging 记录日志。首先,通过 LogFactory.getLog(Main.class)
获取一个 Log
实例,其中 Main.class
作为参数传入,表示日志记录器与 Main
类关联。然后,使用 log.info()
和 log.warn()
方法分别记录 "start..." 消息,日志级别为 INFO,以及 "end." 消息,日志级别为 WARN。
由于 Commons Logging 是第三方库,需要先下载并将其添加到 classpath 中才能编译和运行代码。
- 编译:
javac -cp commons-logging-1.2.jar Main.java
- 运行:
# Windows java -cp .;commons-logging-1.2.jar Main # Linux/macOS) java -cp .:commons-logging-1.2.jar Main
8.2 日志级别
Commons Logging 定义了以下 6 个日志级别(从高到低):
日志级别 | 描述 |
---|---|
FATAL | 致命 |
ERROR | 错误 |
WARNING | 警告 |
INFO | 信息 |
DEBUG | 调试 |
TRACE | 跟踪 |
默认级别是 INFO
。
8.3 静态方法和实例方法中使用 Log
在静态方法中,通常定义一个静态 Log
变量:
public class Main {
static final Log log = LogFactory.getLog(Main.class);
static void foo() {
log.info("foo");
}
}
在实例方法中,通常定义一个实例 Log
变量:
public class Person {
protected final Log log = LogFactory.getLog(getClass());
void foo() {
log.info("foo");
}
}
使用 LogFactory.getLog(getClass())
的好处是子类可以直接使用该 log
实例,并且子类获取的 log
字段实际上相当于 LogFactory.getLog(Student.class)
,但却是从父类继承而来,无需改动代码。
8.4 异常处理
Commons Logging 提供了 info(String, Throwable)
这样的重载方法,可以方便地记录异常信息:
try {
// ...
} catch (Exception e) {
log.error("got exception!", e);
}
log.error(String, Throwable)
方法会将异常信息和堆栈跟踪信息一起记录下来,方便调试和排查问题。