目标:把org.apache.log4j.Logger转化为test.Logger, 使其它类调用test.Logger像调用org.apache.log4j.Logger一样,具有相同的行为。同时对其它类完全隐藏Log4j.
因为使用OSGi所以不方便暴露log4j,需要做一个转化,但同时,Log4j的Logger对象是有缓存的,所以不想通过新建对象的test.Logger(org.apache.log4j.Logger)的方式。下面的实现,是我想要的功能,但并不是正确的,
public class Logger extends org.apache.log4j.Logger{
public Logger(String name) {
super(name);
} public static Logger getLogger(String cat){
return (Logger) org.apache.log4j.Logger.getLogger(cat);
}

public static Logger getLogger(Class clazz){
return (Logger) org.apache.log4j.Logger.getLogger(clazz);
}
}大家有什么想法?

解决方案 »

  1.   

    只能帮你顶基实用log4j可以建一个父类。其它所有的子类直接调用父类的log就行了。
      

  2.   

    我用commons-logging的那个类了,
    /** 
         * For use with a log4j factory.
         */
        public Logger(org.apache.log4j.Logger logger ) {
            if (logger == null) {
                throw new IllegalArgumentException(
                    "Warning - null logger in constructor; possible log4j misconfiguration.");
            }
            this.name = logger.getName();
            this.logger=logger;
        }
    只是这样,每次通过Logger.getLogger()都要新建一个包含对Log4j Logger封装的对象。
    比较郁闷。不过感觉Java也确实没办法实现接口的平行转换。