1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Copyright 2001-2004 The Apache Software Foundation.
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * you may not use this file except in compliance with the License.
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * You may obtain a copy of the License at
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * See the License for the specific language governing permissions and
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * limitations under the License.
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.commons.logging.impl;
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.io.InputStream;
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.io.Serializable;
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.lang.reflect.InvocationTargetException;
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.lang.reflect.Method;
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.security.AccessController;
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.security.PrivilegedAction;
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.text.DateFormat;
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.text.SimpleDateFormat;
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Date;
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport java.util.Properties;
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.commons.logging.Log;
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.commons.logging.LogConfigurationException;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <p>Simple implementation of Log that sends all enabled log messages,
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * for all defined loggers, to System.err.  The following system properties
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * are supported to configure the behavior of this logger:</p>
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <ul>
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.defaultlog</code> -
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Default logging detail level for all instances of SimpleLog.
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     If not specified, defaults to "info". </li>
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.log.xxxxx</code> -
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Logging detail level for a SimpleLog instance named "xxxxx".
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     If not specified, the default logging detail level is used.</li>
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.showlogname</code> -
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Set to <code>true</code> if you want the Log instance name to be
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     included in output messages. Defaults to <code>false</code>.</li>
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.showShortLogname</code> -
51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Set to <code>true</code> if you want the last component of the name to be
52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     included in output messages. Defaults to <code>true</code>.</li>
53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.showdatetime</code> -
54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     Set to <code>true</code> if you want the current date and time
55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     to be included in output messages. Default is <code>false</code>.</li>
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <li><code>org.apache.commons.logging.simplelog.dateTimeFormat</code> -
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     The date and time format to be used in the output messages.
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     The pattern describing the date and time format is the same that is
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     used in <code>java.text.SimpleDateFormat</code>. If the format is not
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     specified or is invalid, the default format is used.
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *     The default format is <code>yyyy/MM/dd HH:mm:ss:SSS zzz</code>.</li>
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * </ul>
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <p>In addition to looking for system properties with the names specified
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * above, this implementation also checks for a class loader resource named
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <code>"simplelog.properties"</code>, and includes any matching definitions
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * from this resource (if it exists).</p>
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author Rod Waldhoff
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author Robert Burrell Donkin
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Id: SimpleLog.java 399221 2006-05-03 09:20:24Z dennisl $
74d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
75d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
76d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
77d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
79d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic class SimpleLog implements Log, Serializable {
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // ------------------------------------------------------- Class Attributes
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** All system properties used by <code>SimpleLog</code> start with this */
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected final String systemPrefix =
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        "org.apache.commons.logging.simplelog.";
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Properties loaded from simplelog.properties */
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected final Properties simpleLogProps = new Properties();
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The default format to use when formating dates */
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected final String DEFAULT_DATE_TIME_FORMAT =
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        "yyyy/MM/dd HH:mm:ss:SSS zzz";
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Include the instance name in the log message? */
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected boolean showLogName = false;
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Include the short name ( last component ) of the logger in the log
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *  message. Defaults to true - otherwise we'll be lost in a flood of
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *  messages without knowing who sends them.
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected boolean showShortName = true;
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Include the current time in the log message */
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected boolean showDateTime = false;
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The date and time format to use in the log message */
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected String dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Used to format times */
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static protected DateFormat dateFormatter = null;
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // ---------------------------------------------------- Log Level Constants
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Trace" level logging. */
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_TRACE  = 1;
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Debug" level logging. */
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_DEBUG  = 2;
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Info" level logging. */
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_INFO   = 3;
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Warn" level logging. */
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_WARN   = 4;
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Error" level logging. */
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_ERROR  = 5;
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** "Fatal" level logging. */
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_FATAL  = 6;
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Enable all logging levels */
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_ALL    = (LOG_LEVEL_TRACE - 1);
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** Enable no logging levels */
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public static final int LOG_LEVEL_OFF    = (LOG_LEVEL_FATAL + 1);
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // ------------------------------------------------------------ Initializer
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private static String getStringProperty(String name) {
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String prop = null;
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project	try {
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project	    prop = System.getProperty(name);
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project	} catch (SecurityException e) {
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project	    ; // Ignore
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project	}
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (prop == null) ? simpleLogProps.getProperty(name) : prop;
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private static String getStringProperty(String name, String dephault) {
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String prop = getStringProperty(name);
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (prop == null) ? dephault : prop;
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private static boolean getBooleanProperty(String name, boolean dephault) {
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String prop = getStringProperty(name);
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (prop == null) ? dephault : "true".equalsIgnoreCase(prop);
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // Initialize class attributes.
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // Load properties file, if found.
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // Override with system properties.
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    static {
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Add props from the resource simplelog.properties
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        InputStream in = getResourceAsStream("simplelog.properties");
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if(null != in) {
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            try {
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                simpleLogProps.load(in);
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                in.close();
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            } catch(java.io.IOException e) {
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // ignored
166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        showLogName = getBooleanProperty( systemPrefix + "showlogname", showLogName);
170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        showShortName = getBooleanProperty( systemPrefix + "showShortLogname", showShortName);
171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        showDateTime = getBooleanProperty( systemPrefix + "showdatetime", showDateTime);
172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if(showDateTime) {
174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            dateTimeFormat = getStringProperty(systemPrefix + "dateTimeFormat",
175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                                               dateTimeFormat);
176069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            try {
177069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                dateFormatter = new SimpleDateFormat(dateTimeFormat);
178069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            } catch(IllegalArgumentException e) {
179069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // If the format pattern is invalid - use the default format
180069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                dateTimeFormat = DEFAULT_DATE_TIME_FORMAT;
181069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                dateFormatter = new SimpleDateFormat(dateTimeFormat);
182069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
183069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
184069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
185069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
186069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
187069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // ------------------------------------------------------------- Attributes
188069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
189069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The name of this simple log instance */
190069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected String logName = null;
191069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The current log level */
192069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected int currentLogLevel;
193069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /** The short name of this simple log instance */
194069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private String shortLogName = null;
195069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
196069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
197069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // ------------------------------------------------------------ Constructor
198069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
199069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
200069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Construct a simple log with given name.
201069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
202069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param name log name
203069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
204069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public SimpleLog(String name) {
205069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
206069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        logName = name;
207069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
208069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Set initial log level
209069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Used to be: set default log level to ERROR
210069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // IMHO it should be lower, but at least info ( costin ).
211069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        setLevel(SimpleLog.LOG_LEVEL_INFO);
212069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
213069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Set log level from properties
214069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        String lvl = getStringProperty(systemPrefix + "log." + logName);
215069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int i = String.valueOf(name).lastIndexOf(".");
216069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        while(null == lvl && i > -1) {
217069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            name = name.substring(0,i);
218069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            lvl = getStringProperty(systemPrefix + "log." + name);
219069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            i = String.valueOf(name).lastIndexOf(".");
220069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
221069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
222069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if(null == lvl) {
223069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            lvl =  getStringProperty(systemPrefix + "defaultlog");
224069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
225069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
226069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if("all".equalsIgnoreCase(lvl)) {
227069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_ALL);
228069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("trace".equalsIgnoreCase(lvl)) {
229069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_TRACE);
230069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("debug".equalsIgnoreCase(lvl)) {
231069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_DEBUG);
232069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("info".equalsIgnoreCase(lvl)) {
233069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_INFO);
234069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("warn".equalsIgnoreCase(lvl)) {
235069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_WARN);
236069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("error".equalsIgnoreCase(lvl)) {
237069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_ERROR);
238069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("fatal".equalsIgnoreCase(lvl)) {
239069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_FATAL);
240069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if("off".equalsIgnoreCase(lvl)) {
241069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            setLevel(SimpleLog.LOG_LEVEL_OFF);
242069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
243069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
244069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
245069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
246069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
247069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // -------------------------------------------------------- Properties
248069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
249069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
250069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Set logging level. </p>
251069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
252069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param currentLogLevel new logging level
253069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
254069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setLevel(int currentLogLevel) {
255069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
256069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.currentLogLevel = currentLogLevel;
257069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
258069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
259069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
260069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
261069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
262069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Get logging level. </p>
263069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
264069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int getLevel() {
265069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
266069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return currentLogLevel;
267069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
268069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
269069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
270069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // -------------------------------------------------------- Logging Methods
271069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
272069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
273069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
274069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Do the actual logging.
275069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * This method assembles the message
276069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * and then calls <code>write()</code> to cause it to be written.</p>
277069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
278069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param type One of the LOG_LEVEL_XXX constants defining the log level
279069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message The message itself (typically a String)
280069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t The exception whose stack trace should be logged
281069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
282069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected void log(int type, Object message, Throwable t) {
283069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Use a string buffer for better performance
284069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        StringBuffer buf = new StringBuffer();
285069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
286069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Append date-time if so configured
287069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if(showDateTime) {
288069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(dateFormatter.format(new Date()));
289069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(" ");
290069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
291069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
292069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Append a readable representation of the log level
293069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        switch(type) {
294069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_TRACE: buf.append("[TRACE] "); break;
295069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_DEBUG: buf.append("[DEBUG] "); break;
296069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_INFO:  buf.append("[INFO] ");  break;
297069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_WARN:  buf.append("[WARN] ");  break;
298069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_ERROR: buf.append("[ERROR] "); break;
299069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            case SimpleLog.LOG_LEVEL_FATAL: buf.append("[FATAL] "); break;
300069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
301069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
302069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Append the name of the log instance if so configured
303069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 	if( showShortName) {
304069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if( shortLogName==null ) {
305069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // Cut all but the last component of the name for both styles
306069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                shortLogName = logName.substring(logName.lastIndexOf(".") + 1);
307069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                shortLogName =
308069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    shortLogName.substring(shortLogName.lastIndexOf("/") + 1);
309069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
310069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(String.valueOf(shortLogName)).append(" - ");
311069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        } else if(showLogName) {
312069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(String.valueOf(logName)).append(" - ");
313069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
314069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
315069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Append the message
316069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        buf.append(String.valueOf(message));
317069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
318069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Append stack trace if not null
319069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if(t != null) {
320069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(" <");
321069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(t.toString());
322069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(">");
323069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
324069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            java.io.StringWriter sw= new java.io.StringWriter(1024);
325069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            java.io.PrintWriter pw= new java.io.PrintWriter(sw);
326069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            t.printStackTrace(pw);
327069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            pw.close();
328069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            buf.append(sw.toString());
329069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
330069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
331069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Print to the appropriate destination
332069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        write(buf);
333069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
334069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
335069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
336069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
337069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
338069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p>Write the content of the message accumulated in the specified
339069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>StringBuffer</code> to the appropriate output destination.  The
340069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * default implementation writes to <code>System.err</code>.</p>
341069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
342069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param buffer A <code>StringBuffer</code> containing the accumulated
343069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *  text to be logged
344069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
345069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected void write(StringBuffer buffer) {
346069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
347069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        System.err.println(buffer.toString());
348069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
349069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
350069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
351069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
352069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
353069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Is the given log level currently enabled?
354069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
355069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param logLevel is this level enabled?
356069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
357069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    protected boolean isLevelEnabled(int logLevel) {
358069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // log level are numerically ordered so can use simple numeric
359069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // comparison
360069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (logLevel >= currentLogLevel);
361069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
362069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
363069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
364069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    // -------------------------------------------------------- Log Implementation
365069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
366069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
367069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
368069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
369069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
370069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
371069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
372069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#debug(Object)
373069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
374069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void debug(Object message) {
375069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
376069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
377069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_DEBUG, message, null);
378069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
379069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
380069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
381069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
382069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
383069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
384069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_DEBUG</code>.
385069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
386069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
387069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
388069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#debug(Object, Throwable)
389069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
390069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void debug(Object message, Throwable t) {
391069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
392069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG)) {
393069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_DEBUG, message, t);
394069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
395069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
396069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
397069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
398069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
399069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
400069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
401069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
402069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
403069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#trace(Object)
404069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
405069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void trace(Object message) {
406069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
407069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
408069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_TRACE, message, null);
409069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
410069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
411069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
412069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
413069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
414069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
415069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_TRACE</code>.
416069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
417069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
418069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
419069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#trace(Object, Throwable)
420069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
421069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void trace(Object message, Throwable t) {
422069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
423069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE)) {
424069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_TRACE, message, t);
425069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
426069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
427069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
428069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
429069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
430069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
431069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
432069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
433069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
434069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#info(Object)
435069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
436069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void info(Object message) {
437069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
438069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
439069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_INFO,message,null);
440069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
441069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
442069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
443069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
444069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
445069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
446069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_INFO</code>.
447069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
448069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
449069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
450069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#info(Object, Throwable)
451069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
452069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void info(Object message, Throwable t) {
453069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
454069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_INFO)) {
455069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_INFO, message, t);
456069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
457069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
458069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
459069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
460069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
461069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
462069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
463069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
464069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
465069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#warn(Object)
466069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
467069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void warn(Object message) {
468069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
469069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
470069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_WARN, message, null);
471069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
472069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
473069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
474069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
475069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
476069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
477069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_WARN</code>.
478069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
479069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
480069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
481069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#warn(Object, Throwable)
482069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
483069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void warn(Object message, Throwable t) {
484069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
485069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_WARN)) {
486069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_WARN, message, t);
487069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
488069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
489069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
490069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
491069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
492069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
493069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
494069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
495069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
496069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#error(Object)
497069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
498069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void error(Object message) {
499069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
500069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
501069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_ERROR, message, null);
502069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
503069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
504069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
505069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
506069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
507069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
508069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_ERROR</code>.
509069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
510069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
511069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
512069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#error(Object, Throwable)
513069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
514069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void error(Object message, Throwable t) {
515069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
516069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR)) {
517069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_ERROR, message, t);
518069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
519069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
520069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
521069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
522069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
523069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Log a message with
524069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
525069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
526069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
527069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#fatal(Object)
528069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
529069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void fatal(Object message) {
530069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
531069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
532069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_FATAL, message, null);
533069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
534069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
535069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
536069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
537069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
538069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Logs a message with
539069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <code>org.apache.commons.logging.impl.SimpleLog.LOG_LEVEL_FATAL</code>.
540069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
541069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param message to log
542069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @param t log this cause
543069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @see org.apache.commons.logging.Log#fatal(Object, Throwable)
544069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
545069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final void fatal(Object message, Throwable t) {
546069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
547069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL)) {
548069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            log(SimpleLog.LOG_LEVEL_FATAL, message, t);
549069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
550069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
551069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
552069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
553069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
554069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are debug messages currently enabled? </p>
555069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
556069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
557069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
558069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
559069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
560069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isDebugEnabled() {
561069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
562069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_DEBUG);
563069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
564069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
565069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
566069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
567069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are error messages currently enabled? </p>
568069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
569069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
570069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
571069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
572069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
573069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isErrorEnabled() {
574069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
575069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_ERROR);
576069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
577069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
578069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
579069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
580069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are fatal messages currently enabled? </p>
581069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
582069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
583069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
584069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
585069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
586069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isFatalEnabled() {
587069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
588069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_FATAL);
589069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
590069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
591069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
592069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
593069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are info messages currently enabled? </p>
594069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
595069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
596069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
597069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
598069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
599069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isInfoEnabled() {
600069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
601069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_INFO);
602069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
603069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
604069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
605069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
606069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are trace messages currently enabled? </p>
607069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
608069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
609069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
610069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
611069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
612069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isTraceEnabled() {
613069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
614069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_TRACE);
615069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
616069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
617069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
618069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
619069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> Are warn messages currently enabled? </p>
620069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
621069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * <p> This allows expensive operations such as <code>String</code>
622069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * concatenation to be avoided when the message will be ignored by the
623069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * logger. </p>
624069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
625069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public final boolean isWarnEnabled() {
626069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
627069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return isLevelEnabled(SimpleLog.LOG_LEVEL_WARN);
628069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
629069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
630069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
631069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    /**
632069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Return the thread context class loader if available.
633069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * Otherwise return null.
634069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
635069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * The thread context class loader is available for JDK 1.2
636069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * or later, if certain security conditions are met.
637069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     *
638069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * @exception LogConfigurationException if a suitable class loader
639069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     * cannot be identified.
640069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project     */
641069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private static ClassLoader getContextClassLoader()
642069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    {
643069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        ClassLoader classLoader = null;
644069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
645069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (classLoader == null) {
646069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            try {
647069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // Are we running on a JDK 1.2 or later system?
648069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                Method method = Thread.class.getMethod("getContextClassLoader",
649069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        (Class[]) null);
650069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
651069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // Get the thread context class loader (if there is one)
652069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                try {
653069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    classLoader = (ClassLoader)method.invoke(Thread.currentThread(),
654069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                            (Object[]) null);
655069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
656069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                } catch (IllegalAccessException e) {
657069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    ;  // ignore
658069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                } catch (InvocationTargetException e) {
659069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    /**
660069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * InvocationTargetException is thrown by 'invoke' when
661069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * the method being invoked (getContextClassLoader) throws
662069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * an exception.
663069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     *
664069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * getContextClassLoader() throws SecurityException when
665069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * the context class loader isn't an ancestor of the
666069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * calling class's class loader, or if security
667069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * permissions are restricted.
668069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     *
669069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * In the first case (not related), we want to ignore and
670069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * keep going.  We cannot help but also ignore the second
671069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * with the logic below, but other calls elsewhere (to
672069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * obtain a class loader) will trigger this exception where
673069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     * we can make a distinction.
674069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                     */
675069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    if (e.getTargetException() instanceof SecurityException) {
676069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        ;  // ignore
677069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    } else {
678069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        // Capture 'e.getTargetException()' exception for details
679069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        // alternate: log 'e.getTargetException()', and pass back 'e'.
680069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        throw new LogConfigurationException
681069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                            ("Unexpected InvocationTargetException", e.getTargetException());
682069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    }
683069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                }
684069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            } catch (NoSuchMethodException e) {
685069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                // Assume we are running on JDK 1.1
686069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                ;  // ignore
687069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
688069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
689069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
690069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (classLoader == null) {
691069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            classLoader = SimpleLog.class.getClassLoader();
692069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
693069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
694069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        // Return the selected class loader
695069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return classLoader;
696069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
697069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
698069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private static InputStream getResourceAsStream(final String name)
699069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    {
700069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return (InputStream)AccessController.doPrivileged(
701069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            new PrivilegedAction() {
702069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                public Object run() {
703069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    ClassLoader threadCL = getContextClassLoader();
704069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
705069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    if (threadCL != null) {
706069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        return threadCL.getResourceAsStream(name);
707069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    } else {
708069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                        return ClassLoader.getSystemResourceAsStream(name);
709069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                    }
710069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                }
711069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            });
712069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
713069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
714069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
715