我有一个实用程序包,它没有意义有log4j
作为一个依赖,但是有一些静态方法,我仍然想做一些日志记录。
我不希望做以下事情:
- 将记录器作为参数传入
- 将记录器作为依赖项
- 抛出异常的事情不是异常(想想INFO或WARN级别的日志)
是否有任何方式,我可以做日志没有logger作为包的依赖,但它仍然使用log4j时,它的类路径。
您可以使用以下命令检查log4j是否在类路径上:
Class.forName("org.apache.log4j.Logger");
如果您没有异常地获得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.");
}
}