我有一个实用程序包,将log4j
作为依赖项是没有意义的,但是有一些静态方法我仍然希望进行一些日志记录。
我不想做以下事情:
无论如何我可以在没有记录器作为包的依赖项的情况下进行日志记录,但是当它在类路径上时仍然使用log4j。
答案 0 :(得分:0)
您可以使用以下命令检查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.");
}
}