⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logfactoryimpl.java

📁 source code for apache project logging system
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @param value Value of the attribute to set, or <code>null</code>     *  to remove any setting for this attribute     */    public void setAttribute(String name, Object value) {        if (value == null) {            attributes.remove(name);        } else {            attributes.put(name, value);        }    }    // ------------------------------------------------------ Protected Methods    /**     * Return the fully qualified Java classname of the {@link Log}     * implementation we will be using.     */    protected String getLogClassName() {        // Return the previously identified class name (if any)        if (logClassName != null) {            return logClassName;        }        logClassName = (String) getAttribute(LOG_PROPERTY);        if (logClassName == null) { // @deprecated            logClassName = (String) getAttribute(LOG_PROPERTY_OLD);        }        if (logClassName == null) {            try {                logClassName = System.getProperty(LOG_PROPERTY);            } catch (SecurityException e) {                ;            }        }        if (logClassName == null) { // @deprecated            try {                logClassName = System.getProperty(LOG_PROPERTY_OLD);            } catch (SecurityException e) {                ;            }        }        if ((logClassName == null) && isLog4JAvailable()) {            logClassName = "org.apache.commons.logging.impl.Log4JLogger";        }        if ((logClassName == null) && isJdk14Available()) {            logClassName = "org.apache.commons.logging.impl.Jdk14Logger";        }        if ((logClassName == null) && isJdk13LumberjackAvailable()) {            logClassName = "org.apache.commons.logging.impl.Jdk13LumberjackLogger";        }        if (logClassName == null) {            logClassName = "org.apache.commons.logging.impl.SimpleLog";        }        return (logClassName);    }    /**     * <p>Return the <code>Constructor</code> that can be called to instantiate     * new {@link org.apache.commons.logging.Log} instances.</p>     *     * <p><strong>IMPLEMENTATION NOTE</strong> - Race conditions caused by     * calling this method from more than one thread are ignored, because     * the same <code>Constructor</code> instance will ultimately be derived     * in all circumstances.</p>     *     * @exception LogConfigurationException if a suitable constructor     *  cannot be returned     */    protected Constructor getLogConstructor()        throws LogConfigurationException {        // Return the previously identified Constructor (if any)        if (logConstructor != null) {            return logConstructor;        }        String logClassName = getLogClassName();        // Attempt to load the Log implementation class        Class logClass = null;        Class logInterface = null;        try {            logInterface = this.getClass().getClassLoader().loadClass                (LOG_INTERFACE);            logClass = loadClass(logClassName);            if (logClass == null) {                throw new LogConfigurationException                    ("No suitable Log implementation for " + logClassName);            }            if (!logInterface.isAssignableFrom(logClass)) {                Class interfaces[] = logClass.getInterfaces();                for (int i = 0; i < interfaces.length; i++) {                    if (LOG_INTERFACE.equals(interfaces[i].getName())) {                        throw new LogConfigurationException                            ("Invalid class loader hierarchy.  " +                             "You have more than one version of '" +                             LOG_INTERFACE + "' visible, which is " +                             "not allowed.");                    }                }                throw new LogConfigurationException                    ("Class " + logClassName + " does not implement '" +                     LOG_INTERFACE + "'.");            }        } catch (Throwable t) {            throw new LogConfigurationException(t);        }        // Identify the <code>setLogFactory</code> method (if there is one)        try {            logMethod = logClass.getMethod("setLogFactory",                                           logMethodSignature);        } catch (Throwable t) {            logMethod = null;        }        // Identify the corresponding constructor to be used        try {            logConstructor = logClass.getConstructor(logConstructorSignature);            return (logConstructor);        } catch (Throwable t) {            throw new LogConfigurationException                ("No suitable Log constructor " +                 logConstructorSignature+ " for " + logClassName, t);        }    }    /**     * MUST KEEP THIS METHOD PRIVATE.     *     * <p>Exposing this method outside of     * <code>org.apache.commons.logging.LogFactoryImpl</code>     * will create a security violation:     * This method uses <code>AccessController.doPrivileged()</code>.     * </p>     *     * Load a class, try first the thread class loader, and     * if it fails use the loader that loaded this class.     */    private static Class loadClass( final String name )        throws ClassNotFoundException    {        Object result = AccessController.doPrivileged(            new PrivilegedAction() {                public Object run() {                    ClassLoader threadCL = getContextClassLoader();                    if (threadCL != null) {                        try {                            return threadCL.loadClass(name);                        } catch( ClassNotFoundException ex ) {                            // ignore                        }                    }                    try {                        return Class.forName( name );                    } catch (ClassNotFoundException e) {                        return e;                    }                }            });        if (result instanceof Class)            return (Class)result;        throw (ClassNotFoundException)result;    }    /**     * Is <em>JDK 1.3 with Lumberjack</em> logging available?     */    protected boolean isJdk13LumberjackAvailable() {        try {            loadClass("java.util.logging.Logger");            loadClass("org.apache.commons.logging.impl.Jdk13LumberjackLogger");            return (true);        } catch (Throwable t) {            return (false);        }    }    /**     * <p>Return <code>true</code> if <em>JDK 1.4 or later</em> logging     * is available.  Also checks that the <code>Throwable</code> class     * supports <code>getStackTrace()</code>, which is required by     * Jdk14Logger.</p>     */    protected boolean isJdk14Available() {        try {            loadClass("java.util.logging.Logger");            loadClass("org.apache.commons.logging.impl.Jdk14Logger");            Class throwable = loadClass("java.lang.Throwable");            if (throwable.getDeclaredMethod("getStackTrace", null) == null) {                return (false);            }            return (true);        } catch (Throwable t) {            return (false);        }    }    /**     * Is a <em>Log4J</em> implementation available?     */    protected boolean isLog4JAvailable() {        try {            loadClass("org.apache.log4j.Logger");            loadClass("org.apache.commons.logging.impl.Log4JLogger");            return (true);        } catch (Throwable t) {            return (false);        }    }    /**     * Create and return a new {@link org.apache.commons.logging.Log}     * instance for the specified name.     *     * @param name Name of the new logger     *     * @exception LogConfigurationException if a new instance cannot     *  be created     */    protected Log newInstance(String name) throws LogConfigurationException {        Log instance = null;        try {            Object params[] = new Object[1];            params[0] = name;            instance = (Log) getLogConstructor().newInstance(params);            if (logMethod != null) {                params[0] = this;                logMethod.invoke(instance, params);            }            return (instance);        } catch (InvocationTargetException e) {            Throwable c = e.getTargetException();            if (c != null) {                throw new LogConfigurationException(c);            } else {                throw new LogConfigurationException(e);            }        } catch (Throwable t) {            throw new LogConfigurationException(t);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -