📄 logfactoryimpl.java
字号:
* @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 + -