1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util.logging; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilsonimport dalvik.system.DalvikLogHandler; 21c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilsonimport dalvik.system.DalvikLogging; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList; 23c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilsonimport java.util.Iterator; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Locale; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.MissingResourceException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ResourceBundle; 28b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilsonimport java.util.concurrent.CopyOnWriteArrayList; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 313cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * Loggers are used to log records to a variety of destinations such as log files or 323cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * the console. They use instances of {@link Handler} to actually do the destination-specific 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * operations. 343cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * 353cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * <p>Client applications can get named loggers by calling the {@code getLogger} 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods. They can also get anonymous loggers by calling the 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getAnonymousLogger} methods. Named loggers are organized in a 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * namespace hierarchy managed by a log manager. The naming convention is 393cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * usually the Java package naming convention. Anonymous loggers do not belong to any namespace. 403cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * 413cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * <p>Developers should use named loggers to enable logging to be controlled on a 423cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * per-{@code Logger} granularity. The recommended idiom is to create and assign the logger to 433cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * a {@code static final} field. This ensures that there's always a strong reference to the logger, 443cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * preventing it from being garbage collected. In particular, {@link LogManager#addLogger(Logger)} 453cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * will <i>not</i> keep your logger live. 463cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * 473cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * <p>Loggers "inherit" log level setting from their parent if their own level is 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * set to {@code null}. This is also true for the resource bundle. The logger's 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * resource bundle is used to localize the log messages if no resource bundle 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * name is given when a log method is called. If {@code getUseParentHandlers()} 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns {@code true}, loggers also inherit their parent's handlers. In this 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * context, "inherit" only means that "behavior" is inherited. The internal 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * field values will not change, for example, {@code getLevel()} still returns 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}. 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * When loading a given resource bundle, the logger first tries to use the 573cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * context {@code ClassLoader}. If that fails, it tries the system {@code ClassLoader}. And if 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that still fails, it searches up the class stack and uses each class's 593cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * {@code ClassLoader} to try to locate the resource bundle. 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Some log methods accept log requests that do not specify the source class and 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method. In these cases, the logging framework will automatically infer 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calling class and method, but this is not guaranteed to be accurate. 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Once a {@code LogRecord} object has been passed into the logging framework, 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it is owned by the logging framework and the client applications should not 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * use it any longer. 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * All methods of this class are thread-safe. 709a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see LogManager 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Logger { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /** A handler for use when no handler optimization is possible. */ 76c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson private static final DalvikLogHandler GENERAL_LOG_HANDLER = new DalvikLogHandler() { 77c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson public void publish(Logger source, String tag, Level level, String message) { 78c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson LogRecord record = new LogRecord(level, message); 79c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson record.setLoggerName(source.name); 80c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson source.setResourceBundle(record); 81c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson source.log(record); 82c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 83c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson }; 84c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 853cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes /** 863cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * The name of the global logger. Before using this, see the discussion of how to use 873cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * {@code Logger} in the class documentation. 883cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * @since 1.6 893cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes */ 903cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes public static final String GLOBAL_LOGGER_NAME = "global"; 913cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes 923cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes /** 933cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * The global logger is provided as convenience for casual use. 9499b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes * @deprecated This is deadlock-prone. Use {@code Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)} 9599b4489d0555c6e0e5df941cbfad4cf250c8f0b8Elliott Hughes * as a direct replacement, but read the discussion of how to use {@link Logger} in the class 963cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes * documentation. 973cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes */ 983cea39f0684e5b775f1a20dc6589bdd22cf23920Elliott Hughes @Deprecated 990d4ce4227fa818288b8db762b640dfa21e3162f5Elliott Hughes public static final Logger global = new Logger(GLOBAL_LOGGER_NAME, null); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 101b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson /** 102b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * When converting the concurrent collection of handlers to an array, we 103b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * always pass a zero-length array to avoid size miscalculations. Passing 104b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * properly-sized arrays is non-atomic, and risks a null element in the 105b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * result. 106b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson */ 107b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson private static final Handler[] EMPTY_HANDLERS_ARRAY = new Handler[0]; 108b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson 109d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** The name of this logger. */ 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private volatile String name; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** The parent logger of this logger. */ 113d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Logger parent; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 115d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** The logging level of this logger, or null if none is set. */ 116d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson volatile Level levelObjVal; 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 119d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * The effective logging level of this logger. In order of preference this 120d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * is the first applicable of: 121d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * <ol> 122d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * <li>the int value of this logger's {@link #levelObjVal} 123d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * <li>the logging level of the parent 124d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * <li>the default level ({@link Level#INFO}) 125d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * </ol> 126d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 127d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson volatile int levelIntVal = Level.INFO.intValue(); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** The filter. */ 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Filter filter; 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 133d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * The resource bundle used to localize logging messages. If null, no 134d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * localization will be performed. 135d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 136b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson private volatile String resourceBundleName; 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 138d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** The loaded resource bundle according to the specified name. */ 139b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson private volatile ResourceBundle resourceBundle; 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 142b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * The handlers attached to this logger. Eagerly initialized and 143b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * concurrently modified. 144d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 145b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson private final List<Handler> handlers = new CopyOnWriteArrayList<Handler>(); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 147d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** True to notify the parent's handlers of each log message. */ 148d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson private boolean notifyParentHandlers = true; 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 151d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * Indicates whether this logger is named. Only {@link #getAnonymousLogger 152d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * anonymous loggers} are unnamed. 153d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 154d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson private boolean isNamed = true; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 156d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 157d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * Child loggers. Should be accessed only while synchronized on {@code 158d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * LogManager.getLogManager()}. 159d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 160d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson final List<Logger> children = new ArrayList<Logger>(); 1619a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson 162c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /** the tag used for optimized logging. Derived from the logger name. */ 163c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson private final String androidTag; 164c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 165c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /** Handler delegate for either optimized or standard logging. */ 166c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson private volatile DalvikLogHandler dalvikLogHandler = GENERAL_LOG_HANDLER; 167c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 168c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /** 169c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * We've optimized for the common case: logging to a single handler that 170c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * implements {@link DalvikLogHandler}. This is how Android framework 171c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * applications are configured by default. 172c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 173c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * <p>This optimization has been measured to show a 2.75x improvement in 174c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * throughput in the common case: 154ns vs. 56ns per message on a Cortex-A8. 175c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * Direct use of {@code android.util.Log} takes 29ns per message. 176c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 177c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * <p>Each time the handler configuration changes, either directly or 178c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * indirectly, it's necessary to either turn on or off this optimization. 179c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * When the optimization is off, {@link #dalvikLogHandler} is assigned to 180c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * {@link #GENERAL_LOG_HANDLER} which can satisfy arbitrary configuration. 181c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * When the optimization is possible, {@link #dalvikLogHandler} is assigned 182c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * to the user's efficient implementation. In pratice this is usually the 183c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * {@code com.android.internal.logging.AndroidHandler}. 184c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson */ 185c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson void updateDalvikLogHandler() { 186c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson DalvikLogHandler newLogHandler = GENERAL_LOG_HANDLER; 187c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 188c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson Logger parent = this.parent; 189c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 190c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson if (getClass() != Logger.class) { 191c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /* 192c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * Do nothing. Subclasses aren't eligible for the optimization 193c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * because they may override methods like getHandlers() or 194c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * log(LogRecord). 195c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson */ 196c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 197c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } else if (parent == null) { 198c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson // we use an iterator rather than size()+get() for safe concurrency 199c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson Iterator<Handler> h = handlers.iterator(); 200c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson if (h.hasNext()) { 201c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson Handler firstHandler = h.next(); 202c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson if (!h.hasNext() && firstHandler instanceof DalvikLogHandler) { 203c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /* 204c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * At this point, we're eligible for the optimization. We've 205c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * satisfied these constraints: 206c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 1. This is not a subclass of logger 207c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 2. This is a root logger (no parent) 208c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 3. There is exactly one handler installed 209c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 4. That handler is a DalvikLogHandler 210c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson */ 211c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson newLogHandler = (DalvikLogHandler) firstHandler; 212c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 213c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 214c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } else if (handlers.isEmpty() && notifyParentHandlers) { 215c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson /* 216c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * At this point, we're eligible for the optimization if our parent 217c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * logger is eligible. We've satisfied these constraints: 218c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 1. This is not a subclass of logger 219c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 2. our parent exists 220c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 3. we have no handlers of our own 221c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson * 4. we notify our parent's handlers 222c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson */ 223c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson newLogHandler = parent.dalvikLogHandler; 224c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 225c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 226c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson if (newLogHandler == this.dalvikLogHandler) { 227c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson return; 228c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 229c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 230c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson this.dalvikLogHandler = newLogHandler; 231c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 232c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson for (Logger logger : children) { 233c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson logger.updateDalvikLogHandler(); 234c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 235c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson } 236c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a {@code Logger} object with the supplied name and resource 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bundle name; {@code notifiyParentHandlers} is set to {@code true}. 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 2419a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * Notice : Loggers use a naming hierarchy. Thus "z.x.y" is a child of "z.x". 2429a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of this logger, may be {@code null} for anonymous 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * loggers. 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundleName 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize logging 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * messages, may be {@code null}. 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MissingResourceException 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified resource bundle can not be loaded. 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Logger(String name, String resourceBundleName) { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.name = name; 254b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson initResourceBundle(resourceBundleName); 255c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson this.androidTag = DalvikLogging.loggerNameToTag(name); 256c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson updateDalvikLogHandler(); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Load the specified resource bundle, use privileged code. 2619a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundleName 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle to load, cannot be {@code null}. 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the loaded resource bundle. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MissingResourceException 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified resource bundle can not be loaded. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static ResourceBundle loadResourceBundle(String resourceBundleName) { 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // try context class loader to load the resource 270ad41624e761bcf1af9c8008eb45187fc13983717Elliott Hughes ClassLoader cl = Thread.currentThread().getContextClassLoader(); 271d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (cl != null) { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 273560d3756e9a8e95ed3aba6043118e89f87966522Jesse Wilson return ResourceBundle.getBundle(resourceBundleName, Locale.getDefault(), cl); 274560d3756e9a8e95ed3aba6043118e89f87966522Jesse Wilson } catch (MissingResourceException ignored) { 275560d3756e9a8e95ed3aba6043118e89f87966522Jesse Wilson // Failed to load using context class loader, ignore 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // try system class loader to load the resource 279ad41624e761bcf1af9c8008eb45187fc13983717Elliott Hughes cl = ClassLoader.getSystemClassLoader(); 280d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (cl != null) { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 282ad41624e761bcf1af9c8008eb45187fc13983717Elliott Hughes return ResourceBundle.getBundle(resourceBundleName, Locale.getDefault(), cl); 283560d3756e9a8e95ed3aba6043118e89f87966522Jesse Wilson } catch (MissingResourceException ignored) { 284560d3756e9a8e95ed3aba6043118e89f87966522Jesse Wilson // Failed to load using system class loader, ignore 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2878454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new MissingResourceException("Failed to load the specified resource bundle \"" + 2888454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes resourceBundleName + "\"", resourceBundleName, null); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an anonymous logger to use internally in a thread. Anonymous loggers 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are not registered in the log manager's namespace. No security checks 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be performed when updating an anonymous logger's control settings. 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The anonymous loggers' parent is set to be the root logger. This way it 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inherits the default logging level and handlers from the root logger. 2989a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new instance of anonymous logger. 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Logger getAnonymousLogger() { 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getAnonymousLogger(null); 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets an anonymous logger to use internally in a thread. Anonymous loggers 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * are not registered in the log manager's namespace. No security checks 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * will be performed when updating an anonymous logger's control settings. 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The anonymous loggers' parent is set to be the root logger. This way it 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inherits default logging level and handlers from the root logger. 3129a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundleName 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize log messages. 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a new instance of anonymous logger. 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MissingResourceException 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified resource bundle can not be loaded. 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Logger getAnonymousLogger(String resourceBundleName) { 320d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Logger result = new Logger(null, resourceBundleName); 321d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson result.isNamed = false; 322d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogManager logManager = LogManager.getLogManager(); 323d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson logManager.setParent(result, logManager.getLogger("")); 324d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return result; 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 327d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 328d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * Initializes this logger's resource bundle. 329d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * 330d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * @throws IllegalArgumentException if this logger's resource bundle already 331d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * exists and is different from the resource bundle specified. 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 333d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson private synchronized void initResourceBundle(String resourceBundleName) { 334b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson String current = this.resourceBundleName; 335d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 336d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (current != null) { 337d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (current.equals(resourceBundleName)) { 338d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 339d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } else { 3408454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new IllegalArgumentException("Resource bundle name '" + resourceBundleName + "' is inconsistent with the existing '" + current + "'"); 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 344d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (resourceBundleName != null) { 345b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson this.resourceBundle = loadResourceBundle(resourceBundleName); 346b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson this.resourceBundleName = resourceBundleName; 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets a named logger. The returned logger may already exist or may be 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * newly created. In the latter case, its level will be set to the 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * configured level according to the {@code LogManager}'s properties. 3549a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the logger to get, cannot be {@code null}. 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a named logger. 3589a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * @throws MissingResourceException 3599a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * If the specified resource bundle can not be loaded. 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Logger getLogger(String name) { 362d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return LogManager.getLogManager().getOrCreate(name, null); 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets a named logger associated with the supplied resource bundle. The 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * resource bundle will be used to localize logging messages. 3689a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param name 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the logger to get, cannot be {@code null}. 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundleName 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle, may be {@code null}. 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the logger identified by {@code name} is associated with a 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * resource bundle and its name is not equal to 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code resourceBundleName}. 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MissingResourceException 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the name of the resource bundle cannot be found. 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a named logger. 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Logger getLogger(String name, String resourceBundleName) { 382d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Logger result = LogManager.getLogManager() 383d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson .getOrCreate(name, resourceBundleName); 384d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson result.initResourceBundle(resourceBundleName); 385d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return result; 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 389da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes * Returns the global {@code Logger}. 390da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes * @since 1.7 391da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes */ 392da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes public static Logger getGlobal() { 393da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes return global; 394da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes } 395da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes 396da919b1f08fa713ee78aabb3e2e324630ae1b59dElliott Hughes /** 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Adds a handler to this logger. The {@code name} will be fed with log 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * records received by this logger. 3999a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param handler 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the handler object to add, cannot be {@code null}. 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void addHandler(Handler handler) { 404d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (handler == null) { 4058454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new NullPointerException("handler == null"); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Anonymous loggers can always add handlers 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isNamed) { 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project LogManager.getLogManager().checkAccess(); 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 411b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson this.handlers.add(handler); 412fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes updateDalvikLogHandler(); 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4149a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson 415d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /** 416b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * Set the logger's manager and initializes its configuration from the 417b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * manager's properties. 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 419b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson void setManager(LogManager manager) { 420b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson String levelProperty = manager.getProperty(name + ".level"); 421b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson if (levelProperty != null) { 422b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson try { 423b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson manager.setLevelRecursively(Logger.this, Level.parse(levelProperty)); 424b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } catch (IllegalArgumentException invalidLevel) { 425b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson invalidLevel.printStackTrace(); 426d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 427b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } 428d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 42980a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes String handlersPropertyName = name.isEmpty() ? "handlers" : name + ".handlers"; 430b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson String handlersProperty = manager.getProperty(handlersPropertyName); 431b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson if (handlersProperty != null) { 432b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson for (String handlerName : handlersProperty.split(",|\\s")) { 43380a7fbab52b96c9fd47c72f8987d1babe2cd001dElliott Hughes if (handlerName.isEmpty()) { 434d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson continue; 435d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 436d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 437b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson final Handler handler; 438b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson try { 439b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson handler = (Handler) LogManager.getInstanceByClass(handlerName); 440b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } catch (Exception invalidHandlerName) { 441b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson invalidHandlerName.printStackTrace(); 442b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson continue; 443b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } 444b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson 445d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson try { 446d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson String level = manager.getProperty(handlerName + ".level"); 447d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (level != null) { 4489a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson handler.setLevel(Level.parse(level)); 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 450b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } catch (Exception invalidLevel) { 451b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson invalidLevel.printStackTrace(); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 453b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson 454b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson handlers.add(handler); 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 457c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 458fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes updateDalvikLogHandler(); 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets all the handlers associated with this logger. 4639a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an array of all the handlers associated with this logger. 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Handler[] getHandlers() { 467b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson return handlers.toArray(EMPTY_HANDLERS_ARRAY); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes a handler from this logger. If the specified handler does not 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * exist then this method has no effect. 4739a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param handler 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the handler to be removed. 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void removeHandler(Handler handler) { 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Anonymous loggers can always remove handlers 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isNamed) { 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project LogManager.getLogManager().checkAccess(); 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 482d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (handler == null) { 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 485b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson this.handlers.remove(handler); 486fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes updateDalvikLogHandler(); 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the filter used by this logger. 4919a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the filter used by this logger, may be {@code null}. 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Filter getFilter() { 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.filter; 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the filter used by this logger. 5009a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newFilter 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the filter to set, may be {@code null}. 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setFilter(Filter newFilter) { 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Anonymous loggers can always set the filter 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isNamed) { 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project LogManager.getLogManager().checkAccess(); 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project filter = newFilter; 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the logging level of this logger. A {@code null} level indicates 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that this logger inherits its parent's level. 5159a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the logging level of this logger. 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Level getLevel() { 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return levelObjVal; 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the logging level for this logger. A {@code null} level indicates 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that this logger will inherit its parent's level. 5259a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param newLevel 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the logging level to set. 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLevel(Level newLevel) { 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Anonymous loggers can always set the level 531d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogManager logManager = LogManager.getLogManager(); 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isNamed) { 533d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson logManager.checkAccess(); 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 535d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson logManager.setLevelRecursively(this, newLevel); 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the flag which indicates whether to use the handlers of this 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logger's parent to publish incoming log records, potentially recursively 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * up the namespace. 5429a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if set to use parent's handlers, {@code false} 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean getUseParentHandlers() { 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.notifyParentHandlers; 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the flag which indicates whether to use the handlers of this 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logger's parent, potentially recursively up the namespace. 5539a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param notifyParentHandlers 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new flag indicating whether to use the parent's handlers. 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setUseParentHandlers(boolean notifyParentHandlers) { 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Anonymous loggers can always set the useParentHandlers flag 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (this.isNamed) { 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project LogManager.getLogManager().checkAccess(); 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.notifyParentHandlers = notifyParentHandlers; 563fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes updateDalvikLogHandler(); 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the nearest parent of this logger in the namespace, a {@code null} 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value will be returned if called on the root logger. 5699a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the parent of this logger in the namespace. 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Logger getParent() { 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parent; 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the parent of this logger in the namespace. This method should be 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * used by the {@code LogManager} object only. 5799a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param parent 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parent logger to set. 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParent(Logger parent) { 584d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (parent == null) { 5858454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new NullPointerException("parent == null"); 586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 588d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // even anonymous loggers are checked 589d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogManager logManager = LogManager.getLogManager(); 590d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson logManager.checkAccess(); 591d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson logManager.setParent(this, parent); 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of this logger, {@code null} for anonymous loggers. 5969a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of this logger. 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getName() { 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this.name; 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the loaded resource bundle used by this logger to localize logging 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * messages. If the value is {@code null}, the parent's resource bundle will be 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inherited. 6079a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the loaded resource bundle used by this logger. 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ResourceBundle getResourceBundle() { 611b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson return this.resourceBundle; 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the loaded resource bundle used by this logger to 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * localize logging messages. If the value is {@code null}, the parent's resource 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bundle name will be inherited. 6189a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the loaded resource bundle used by this logger. 620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getResourceBundleName() { 622b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson return this.resourceBundleName; 623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method is for compatibility. Tests written to the reference 627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation API imply that the isLoggable() method is not called 628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * directly. This behavior is important because subclass may override 629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * isLoggable() method, so that affect the result of log methods. 630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean internalIsLoggable(Level l) { 632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int effectiveLevel = levelIntVal; 633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (effectiveLevel == Level.OFF.intValue()) { 634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // always return false if the effective level is off 635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return l.intValue() >= effectiveLevel; 638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Determines whether this logger will actually log messages of the 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified level. The effective level used to do the determination may be 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * inherited from its parent. The default level is {@code Level.INFO}. 6449a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param l 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level to check. 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this logger will actually log this level, 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise {@code false}. 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isLoggable(Level l) { 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return internalIsLoggable(l); 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 654b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson /** 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the resource bundle and its name for a supplied LogRecord object. 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method first tries to use this logger's resource bundle if any, 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise try to inherit from this logger's parent, recursively up the 658b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson * namespace. 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void setResourceBundle(LogRecord record) { 661b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson for (Logger p = this; p != null; p = p.parent) { 662b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson String resourceBundleName = p.resourceBundleName; 663b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson if (resourceBundleName != null) { 664b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson record.setResourceBundle(p.resourceBundle); 665b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson record.setResourceBundleName(resourceBundleName); 666b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson return; 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that a method has been entered. A log record 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with log level {@code Level.FINER}, log message "ENTRY", the specified 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source class name and source method name is submitted for logging. 6759a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calling class name. 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the method name. 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void entering(String sourceClass, String sourceMethod) { 682d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 683d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 685d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 686f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes LogRecord record = new LogRecord(Level.FINER, "ENTRY"); 687d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 688d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 689d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 690d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 691d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that a method has been entered. A log record 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with log level {@code Level.FINER}, log message "ENTRY", the specified 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source class name, source method name and one parameter is submitted for 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logging. 6999a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter for the method call. 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void entering(String sourceClass, String sourceMethod, Object param) { 708d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 709d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 711d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 712f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes LogRecord record = new LogRecord(Level.FINER, "ENTRY" + " {0}"); 713d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 714d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 715d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 716d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(new Object[] { param }); 717d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 718d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that a method has been entered. A log record 723adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with log level {@code Level.FINER}, log message "ENTRY", the specified 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source class name, source method name and array of parameters is 725adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * submitted for logging. 7269a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 729adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an array of parameters for the method call. 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void entering(String sourceClass, String sourceMethod, 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] params) { 736d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 737d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 738d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 739d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 740d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson String msg = "ENTRY"; 741d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (params != null) { 742d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson StringBuilder msgBuffer = new StringBuilder("ENTRY"); 743d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson for (int i = 0; i < params.length; i++) { 744d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson msgBuffer.append(" {").append(i).append("}"); 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 746d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson msg = msgBuffer.toString(); 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 748d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(Level.FINER, msg); 749d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 750d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 751d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 752d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(params); 753d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 754d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that a method is exited. A log record with log 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * level {@code Level.FINER}, log message "RETURN", the specified source 760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class name and source method name is submitted for logging. 7619a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the calling class name. 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the method name. 766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void exiting(String sourceClass, String sourceMethod) { 768d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 769d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 771d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 772f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes LogRecord record = new LogRecord(Level.FINER, "RETURN"); 773d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 774d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 775d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 776d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 777d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that a method is exited. A log record with log 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * level {@code Level.FINER}, log message "RETURN", the specified source 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class name, source method name and return value is submitted for logging. 7849a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param result 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the return value of the method call. 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void exiting(String sourceClass, String sourceMethod, Object result) { 793d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 794d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 796d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 797f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes LogRecord record = new LogRecord(Level.FINER, "RETURN" + " {0}"); 798d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 799d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 800d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 801d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(new Object[] { result }); 802d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 803d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message indicating that an exception is thrown. A log record with 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * log level {@code Level.FINER}, log message "THROW", the specified source 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class name, source method name and the {@code Throwable} object is 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * submitted for logging. 8119a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param thrown 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Throwable} object. 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void throwing(String sourceClass, String sourceMethod, 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Throwable thrown) { 821d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(Level.FINER)) { 822d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 824d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 825f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes LogRecord record = new LogRecord(Level.FINER, "THROW"); 826d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 827d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 828d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 829d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setThrown(thrown); 830d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 831d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.SEVERE}; the message is transmitted 836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 8379a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void severe(String msg) { 842b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.SEVERE, msg); 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.WARNING}; the message is 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * transmitted to all subscribed handlers. 8489a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void warning(String msg) { 853b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.WARNING, msg); 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.INFO}; the message is transmitted 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 8599a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void info(String msg) { 864b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.INFO, msg); 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.CONFIG}; the message is transmitted 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 8709a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void config(String msg) { 875b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.CONFIG, msg); 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 877adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.FINE}; the message is transmitted 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 8819a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 885adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void fine(String msg) { 886b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.FINE, msg); 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.FINER}; the message is transmitted 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 8929a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void finer(String msg) { 897b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.FINER, msg); 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 899adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of level {@code Level.FINEST}; the message is transmitted 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to all subscribed handlers. 9039a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void finest(String msg) { 908b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson log(Level.FINEST, msg); 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 910adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the specified level. The message is transmitted to all 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subscribed handlers. 9149a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the specified message. 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void log(Level logLevel, String msg) { 921d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 922d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 924c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson dalvikLogHandler.publish(this, androidTag, logLevel, msg); 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the specified level with the supplied parameter. The 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * message is then transmitted to all subscribed handlers. 9309a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter associated with the event that is logged. 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void log(Level logLevel, String msg, Object param) { 939d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 940d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 942d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 943d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 944d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 945d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(new Object[] { param }); 946d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 947d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the specified level with the supplied parameter array. 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The message is then transmitted to all subscribed handlers. 9539a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter array associated with the event that is logged. 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void log(Level logLevel, String msg, Object[] params) { 962d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 963d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 965d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 966d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 967d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 968d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(params); 969d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 970d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the specified level with the supplied {@code Throwable} 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object. The message is then transmitted to all subscribed handlers. 9769a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to log. 981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param thrown 982adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Throwable} object associated with the event that is 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logged. 984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void log(Level logLevel, String msg, Throwable thrown) { 986d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 987d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 989d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 990d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 991d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 992d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setThrown(thrown); 993d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 994d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a given log record. Only records with a logging level that is equal 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or greater than this logger's level will be submitted to this logger's 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * handlers for logging. If {@code getUseParentHandlers()} returns {@code 1001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * true}, the log record will also be submitted to the handlers of this 1002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logger's parent, potentially recursively up the namespace. 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Since all other log methods call this method to actually perform the 1005adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logging action, subclasses of this class can override this method to 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * catch all logging activities. 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 10089a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param record 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the log record to be logged. 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void log(LogRecord record) { 1013d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(record.getLevel())) { 1014d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1015d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1016d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1017d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // apply the filter if any 1018d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Filter f = filter; 1019d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (f != null && !f.isLoggable(record)) { 1020d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1021d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1022b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson 1023d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson /* 1024d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson * call the handlers of this logger, throw any exception that occurs 1025d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson */ 1026d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Handler[] allHandlers = getHandlers(); 1027d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson for (Handler element : allHandlers) { 1028d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson element.publish(record); 1029d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1030d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // call the parent's handlers if set useParentHandlers 1031d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Logger temp = this; 1032d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Logger theParent = temp.parent; 1033d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson while (theParent != null && temp.getUseParentHandlers()) { 1034d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson Handler[] ha = theParent.getHandlers(); 1035d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson for (Handler element : ha) { 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project element.publish(record); 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1038d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson temp = theParent; 1039d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson theParent = temp.parent; 1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and source method name. 10469a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logp(Level logLevel, String sourceClass, String sourceMethod, 1057adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String msg) { 1058d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1059d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1061d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1062d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1063d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1064d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1065d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1066d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 1067d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and parameter. 10739a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name 1080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter associated with the event that is logged. 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logp(Level logLevel, String sourceClass, String sourceMethod, 1086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String msg, Object param) { 1087d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1088d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1090d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1091d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1092d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1093d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1094d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1095d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(new Object[] { param }); 1096d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 1097d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and parameter array. 11039a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 1113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter array associated with the event that is logged. 1114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logp(Level logLevel, String sourceClass, String sourceMethod, 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String msg, Object[] params) { 1117d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1118d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1120d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1121d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1122d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1123d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1124d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1125d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(params); 1126d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 1127d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and {@code Throwable} object. 11339a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param thrown 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Throwable} object. 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logp(Level logLevel, String sourceClass, String sourceMethod, 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String msg, Throwable thrown) { 1147d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1148d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1150d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1151d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1152d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1153d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1154d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1155d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setThrown(thrown); 1156d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson setResourceBundle(record); 1157d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name 1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and source method name, using the given resource bundle to localize the 1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * message. If {@code bundleName} is null, the empty string or not valid then 1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message is not localized. 11659a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param bundleName 1173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize the message. 1174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logrb(Level logLevel, String sourceClass, String sourceMethod, 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String bundleName, String msg) { 1179d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1180d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1181d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1182d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1183d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1184d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (bundleName != null) { 1185d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson try { 1186d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundle(loadResourceBundle(bundleName)); 1187d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } catch (MissingResourceException e) { 1188d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // ignore 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1190d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundleName(bundleName); 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1192d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1193d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1194d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1195d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and parameter, using the given resource bundle to 1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * localize the message. If {@code bundleName} is null, the empty string 1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or not valid then the message is not localized. 12039a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param bundleName 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize the message. 1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param param 1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter associated with the event that is logged. 1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logrb(Level logLevel, String sourceClass, String sourceMethod, 1218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String bundleName, String msg, Object param) { 1219d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1220d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1221d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1222d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1223d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1224d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (bundleName != null) { 1225d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson try { 1226d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundle(loadResourceBundle(bundleName)); 1227d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } catch (MissingResourceException e) { 1228d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // ignore 1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1230d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundleName(bundleName); 1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1232d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1233d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1234d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1235d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(new Object[] { param }); 1236d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and parameter array, using the given resource bundle 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to localize the message. If {@code bundleName} is null, the empty string 1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or not valid then the message is not localized. 12449a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message. 1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name. 1249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name. 1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param bundleName 1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize the message. 1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param params 1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the parameter array associated with the event that is logged. 1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logrb(Level logLevel, String sourceClass, String sourceMethod, 1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String bundleName, String msg, Object[] params) { 1260d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1261d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1262d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1263d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1264d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1265d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (bundleName != null) { 1266d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson try { 1267d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundle(loadResourceBundle(bundleName)); 1268d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } catch (MissingResourceException e) { 1269d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // ignore 1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1271d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundleName(bundleName); 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1273d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1274d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1275d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1276d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setParameters(params); 1277d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Logs a message of the given level with the specified source class name, 1282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * source method name and {@code Throwable} object, using the given resource 1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bundle to localize the message. If {@code bundleName} is null, the empty 1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * string or not valid then the message is not localized. 12859a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param logLevel 1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level of the given message 1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClass 1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source class name 1290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethod 1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the source method name 1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param bundleName 1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle used to localize the message. 1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the message to be logged. 1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param thrown 1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Throwable} object. 1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void logrb(Level logLevel, String sourceClass, String sourceMethod, 1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String bundleName, String msg, Throwable thrown) { 1301d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (!internalIsLoggable(logLevel)) { 1302d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson return; 1303d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } 1304d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson 1305d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson LogRecord record = new LogRecord(logLevel, msg); 1306d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson if (bundleName != null) { 1307d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson try { 1308d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundle(loadResourceBundle(bundleName)); 1309d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson } catch (MissingResourceException e) { 1310d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson // ignore 1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1312d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setResourceBundleName(bundleName); 1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1314d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setLoggerName(this.name); 1315d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceClassName(sourceClass); 1316d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setSourceMethodName(sourceMethod); 1317d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson record.setThrown(thrown); 1318d9b5d1b899226673e746ad4d9f517244d968e5baJesse Wilson log(record); 1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1321b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson void reset() { 1322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project levelObjVal = null; 1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project levelIntVal = Level.INFO.intValue(); 1324b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson 1325b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson for (Handler handler : handlers) { 1326b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson try { 1327b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson if (handlers.remove(handler)) { 1328b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson handler.close(); 1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1330b501914f9448cc0c5852922d217ae11a29c63467Jesse Wilson } catch (Exception ignored) { 1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1333c99250a4d619670f2a9410df121eff04fdc9e87cJesse Wilson 1334fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes updateDalvikLogHandler(); 1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 1337