我有一个实用程序包,将 log4j
作为依赖项是没有意义的,但是有一些静态方法我仍然想进行一些日志记录。
我不想执行以下操作:
- 将记录器作为参数传递
- 将记录器作为依赖项
- 对非异常的事情抛出异常(例如 INFO 或 WARN 级别的日志记录)
无论如何,我可以在没有记录器作为包的依赖项的情况下进行日志记录,但当它位于类路径上时,它仍然使用 log4j。
最佳答案
您可以使用以下命令检查 log4j 是否位于类路径上:
Class.forName("org.apache.log4j.Logger");
如果您毫无异常(exception)地返回了Class
,则可以继续创建记录器并使用它。
这是一个采用这种方法的完整示例类。请注意,您仍然需要 log4j 来编译您的类,因为您正在引用 log4j Logger
,但您可以在类路径上使用带有或不带有 log4j 的代码。
class YourUtil {
private static final Logger LOGGER;
static {
Class<?> clazz = null;
try {
clazz = Class.forName("org.apache.log4j.Logger");
} catch (ClassNotFoundException e) {}
LOGGER = clazz == null ? null : Logger.getLogger("com.foo.YourUtil");
}
public static void doSomething() {
// To log something:
if (LOGGER != null)
LOGGER.info("Logging using log4j.");
}
}
关于java - 如何在没有日志框架包依赖的情况下进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25176547/