Logging 我可以创建一个;“轻”;在我自己的库中是否依赖第三方库(如log4j)?
我正在维护一个数据库访问库,我想使用log4j进行日志记录。但是日志记录确实是我的库中非常可选的一部分。如果log4j在客户端代码中不可用,那么我就不做日志记录。因此,我创建了一个记录器代理,如下所示:Logging 我可以创建一个;“轻”;在我自己的库中是否依赖第三方库(如log4j)?,logging,proxy,log4j,dependency-management,Logging,Proxy,Log4j,Dependency Management,我正在维护一个数据库访问库,我想使用log4j进行日志记录。但是日志记录确实是我的库中非常可选的一部分。如果log4j在客户端代码中不可用,那么我就不做日志记录。因此,我创建了一个记录器代理,如下所示: public final class JooqLogger { // Initialise only once private static boolean initialisationError = false; // The log4j Logger reference
public final class JooqLogger {
// Initialise only once
private static boolean initialisationError = false;
// The log4j Logger reference
private Logger logger;
// Get the logger proxy for a class
public static JooqLogger getLogger(Class<?> clazz) {
JooqLogger result = new JooqLogger();
try {
result.logger = Logger.getLogger(clazz);
}
// Log4j is not found on the classpath, so ignore most of logging
catch (Throwable t) {
if (!initialisationError) {
initialisationError = true;
result.error("JooqLogger could not initialise log4j logger...");
}
}
return result;
}
// All methods from log4j Logger are available as well.
// They provide redirection and ignore all calls if log4j is not available.
public boolean isTraceEnabled() {
if (logger != null) {
return logger.isTraceEnabled();
}
else {
return false;
}
}
public void trace(Object message) {
if (logger != null) {
logger.trace(message);
}
}
// [... etc ...]
}
public final class JooqLogger{
//只初始化一次
私有静态布尔initialisationError=false;
//log4j记录器参考
私人记录器;
//获取类的记录器代理
公共静态JooqLogger getLogger(clazz类){
JooqLogger结果=新的JooqLogger();
试一试{
result.logger=logger.getLogger(clazz);
}
//在类路径上找不到Log4j,因此忽略大部分日志记录
捕获(可丢弃的t){
如果(!initialisationError){
initialisationError=true;
结果.错误(“JooqLogger无法初始化log4j logger…”);
}
}
返回结果;
}
//log4j记录器中的所有方法也可用。
//如果log4j不可用,它们提供重定向并忽略所有调用。
公共布尔值已启用(){
如果(记录器!=null){
返回logger.isTraceEnabled();
}
否则{
返回false;
}
}
公共无效跟踪(对象消息){
如果(记录器!=null){
logger.trace(消息);
}
}
//[……等……]
}
我的问题是:
使用空实现创建,然后允许最终开发人员/用户/管理员在其他实现中替换。使用空实现创建,然后允许最终开发人员/用户/管理员在其他实现中替换。这是一种有趣的方法。你知道有哪个图书馆实施了这种方法吗?我很想看一些例子AXP就是这样做的。您所需要做的就是默认使用null实现。这是一个有趣的方法。你知道有哪个图书馆实施了这种方法吗?我很想看一些例子AXP就是这样做的。您所需要做的就是默认使用null实现。