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

📄 logsource.java

📁 logging日志的相关包 logging日志的相关包
💻 JAVA
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.commons.logging;import java.lang.reflect.Constructor;import java.util.Hashtable;import org.apache.commons.logging.impl.NoOpLog;/** * <p>Factory for creating {@link Log} instances.  Applications should call * the <code>makeNewLogInstance()</code> method to instantiate new instances * of the configured {@link Log} implementation class.</p> * * <p>By default, calling <code>getInstance()</code> will use the following * algorithm:</p> * <ul> * <li>If Log4J is available, return an instance of *     <code>org.apache.commons.logging.impl.Log4JLogger</code>.</li> * <li>If JDK 1.4 or later is available, return an instance of *     <code>org.apache.commons.logging.impl.Jdk14Logger</code>.</li> * <li>Otherwise, return an instance of *     <code>org.apache.commons.logging.impl.NoOpLog</code>.</li> * </ul> * * <p>You can change the default behavior in one of two ways:</p> * <ul> * <li>On the startup command line, set the system property *     <code>org.apache.commons.logging.log</code> to the name of the *     <code>org.apache.commons.logging.Log</code> implementation class *     you want to use.</li> * <li>At runtime, call <code>LogSource.setLogImplementation()</code>.</li> * </ul> * * @deprecated Use {@link LogFactory} instead - The default factory *  implementation performs exactly the same algorithm as this class did * * @author Rod Waldhoff * @version $Id: LogSource.java 155426 2005-02-26 13:10:49Z dirkv $ */public class LogSource {    // ------------------------------------------------------- Class Attributes    static protected Hashtable logs = new Hashtable();    /** Is log4j available (in the current classpath) */    static protected boolean log4jIsAvailable = false;    /** Is JDK 1.4 logging available */    static protected boolean jdk14IsAvailable = false;    /** Constructor for current log class */    static protected Constructor logImplctor = null;    // ----------------------------------------------------- Class Initializers    static {        // Is Log4J Available?        try {            if (null != Class.forName("org.apache.log4j.Logger")) {                log4jIsAvailable = true;            } else {                log4jIsAvailable = false;            }        } catch (Throwable t) {            log4jIsAvailable = false;        }        // Is JDK 1.4 Logging Available?        try {            if ((null != Class.forName("java.util.logging.Logger")) &&                (null != Class.forName("org.apache.commons.logging.impl.Jdk14Logger"))) {                jdk14IsAvailable = true;            } else {                jdk14IsAvailable = false;            }        } catch (Throwable t) {            jdk14IsAvailable = false;        }        // Set the default Log implementation        String name = null;        try {            name = System.getProperty("org.apache.commons.logging.log");            if (name == null) {                name = System.getProperty("org.apache.commons.logging.Log");            }        } catch (Throwable t) {        }        if (name != null) {            try {                setLogImplementation(name);            } catch (Throwable t) {                try {                    setLogImplementation                            ("org.apache.commons.logging.impl.NoOpLog");                } catch (Throwable u) {                    ;                }            }        } else {            try {                if (log4jIsAvailable) {                    setLogImplementation                            ("org.apache.commons.logging.impl.Log4JLogger");                } else if (jdk14IsAvailable) {                    setLogImplementation                            ("org.apache.commons.logging.impl.Jdk14Logger");                } else {                    setLogImplementation                            ("org.apache.commons.logging.impl.NoOpLog");                }            } catch (Throwable t) {                try {                    setLogImplementation                            ("org.apache.commons.logging.impl.NoOpLog");                } catch (Throwable u) {                    ;                }            }        }    }    // ------------------------------------------------------------ Constructor    /** Don't allow others to create instances */    private LogSource() {    }    // ---------------------------------------------------------- Class Methods    /**     * Set the log implementation/log implementation factory     * by the name of the class.  The given class     * must implement {@link Log}, and provide a constructor that     * takes a single {@link String} argument (containing the name     * of the log).     */    static public void setLogImplementation(String classname) throws            LinkageError, ExceptionInInitializerError,            NoSuchMethodException, SecurityException,            ClassNotFoundException {        try {            Class logclass = Class.forName(classname);            Class[] argtypes = new Class[1];            argtypes[0] = "".getClass();            logImplctor = logclass.getConstructor(argtypes);        } catch (Throwable t) {            logImplctor = null;        }    }    /**     * Set the log implementation/log implementation factory     * by class.  The given class must implement {@link Log},     * and provide a constructor that takes a single {@link String}     * argument (containing the name of the log).     */    static public void setLogImplementation(Class logclass) throws            LinkageError, ExceptionInInitializerError,            NoSuchMethodException, SecurityException {        Class[] argtypes = new Class[1];        argtypes[0] = "".getClass();        logImplctor = logclass.getConstructor(argtypes);    }    /** Get a <code>Log</code> instance by class name */    static public Log getInstance(String name) {        Log log = (Log) (logs.get(name));        if (null == log) {            log = makeNewLogInstance(name);            logs.put(name, log);        }        return log;    }    /** Get a <code>Log</code> instance by class */    static public Log getInstance(Class clazz) {        return getInstance(clazz.getName());    }    /**     * Create a new {@link Log} implementation, based     * on the given <i>name</i>.     * <p>     * The specific {@link Log} implementation returned     * is determined by the value of the     * <tt>org.apache.commons.logging.log</tt> property.     * The value of <tt>org.apache.commons.logging.log</tt> may be set to     * the fully specified name of a class that implements     * the {@link Log} interface.  This class must also     * have a public constructor that takes a single     * {@link String} argument (containing the <i>name</i>     * of the {@link Log} to be constructed.     * <p>     * When <tt>org.apache.commons.logging.log</tt> is not set,     * or when no corresponding class can be found,     * this method will return a Log4JLogger     * if the log4j Logger class is     * available in the {@link LogSource}'s classpath, or a     * Jdk14Logger if we are on a JDK 1.4 or later system, or     * NoOpLog if neither of the above conditions is true.     *     * @param name the log name (or category)     */    static public Log makeNewLogInstance(String name) {        Log log = null;        try {            Object[] args = new Object[1];            args[0] = name;            log = (Log) (logImplctor.newInstance(args));        } catch (Throwable t) {            log = null;        }        if (null == log) {            log = new NoOpLog(name);        }        return log;    }    /**     * Returns a {@link String} array containing the names of     * all logs known to me.     */    static public String[] getLogNames() {        return (String[]) (logs.keySet().toArray(new String[logs.size()]));    }}

⌨️ 快捷键说明

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