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 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.MissingResourceException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ResourceBundle; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A {@code LogRecord} object represents a logging request. It is passed between 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the logging framework and individual logging handlers. Client applications 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * should not modify a {@code LogRecord} object that has been passed into the 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * logging framework. 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The {@code LogRecord} class will infer the source method name and source 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * class name the first time they are accessed if the client application didn't 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specify them explicitly. This automatic inference is based on the analysis of 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the call stack and is not guaranteed to be precise. Client applications 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * should force the initialization of these two fields by calling 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code getSourceClassName} or {@code getSourceMethodName} if they expect to 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * use them after passing the {@code LogRecord} object to another thread or 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * transmitting it over RMI. 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class LogRecord implements Serializable { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 5372048053134512534L; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The major byte used in serialization. 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int MAJOR = 1; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The minor byte used in serialization. 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final int MINOR = 4; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store the current value for the sequence number. 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static long currentSequenceNumber = 0; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store the id for each thread. 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static ThreadLocal<Integer> currentThreadId = new ThreadLocal<Integer>(); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The base id as the starting point for thread ID allocation. 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static int initThreadId = 0; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The logging level. 639a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Level level; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The sequence number. 709a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private long sequenceNumber; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name of the class that issued the logging call. 779a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String sourceClassName; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name of the method that issued the logging call. 849a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String sourceMethodName; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The original message text. 919a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String message; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ID of the thread that issued the logging call. 989a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int threadID; 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The time that the event occurred, in milliseconds since 1970. 1059a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private long millis; 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The associated {@code Throwable} object if any. 1129a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Throwable thrown; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name of the source logger. 1199a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String loggerName; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The name of the resource bundle used to localize the log message. 1269a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @serial 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String resourceBundleName; 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The associated resource bundle if any. 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private transient ResourceBundle resourceBundle; 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // The parameters. 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private transient Object[] parameters; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // If the source method and source class has been initialized 138fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes private transient boolean sourceInitialized; 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a {@code LogRecord} object using the supplied the logging 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * level and message. The millis property is set to the current time. The 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * sequence property is set to a new unique value, allocated in increasing 14499e234cc3322b6c88c9d883da45116d9ec8271dbElliott Hughes * order within the VM. The thread ID is set to a unique value 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * for the current thread. All other properties are set to {@code null}. 1469a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param level 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the logging level, may not be {@code null}. 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param msg 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the raw message. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code level} is {@code null}. 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public LogRecord(Level level, String msg) { 1558454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes if (level == null) { 1568454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new NullPointerException("level == null"); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.level = level; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.message = msg; 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.millis = System.currentTimeMillis(); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (LogRecord.class) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sequenceNumber = currentSequenceNumber++; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Integer id = currentThreadId.get(); 165b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (id == null) { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.threadID = initThreadId; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project currentThreadId.set(Integer.valueOf(initThreadId++)); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.threadID = id.intValue(); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sourceClassName = null; 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sourceMethodName = null; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.loggerName = null; 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.parameters = null; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.resourceBundle = null; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.resourceBundleName = null; 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.thrown = null; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the logging level. 1849a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the logging level. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Level getLevel() { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return level; 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the logging level. 1939a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param level 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the level to set. 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code level} is {@code null}. 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLevel(Level level) { 2008454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes if (level == null) { 2018454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new NullPointerException("level == null"); 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.level = level; 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the logger. 2089a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the logger name. 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getLoggerName() { 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return loggerName; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the name of the logger. 2179a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param loggerName 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the logger name to set. 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setLoggerName(String loggerName) { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.loggerName = loggerName; 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the raw message. 2279a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the raw message, may be {@code null}. 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getMessage() { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return message; 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the raw message. When this record is formatted by a logger that has 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * a localization resource bundle that contains an entry for {@code message}, 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * then the raw message is replaced with its localized version. 2389a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param message 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the raw message to set, may be {@code null}. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMessage(String message) { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.message = message; 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the time when this event occurred, in milliseconds since 1970. 2489a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the time when this event occurred, in milliseconds since 1970. 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getMillis() { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return millis; 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the time when this event occurred, in milliseconds since 1970. 2579a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param millis 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the time when this event occurred, in milliseconds since 1970. 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setMillis(long millis) { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.millis = millis; 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the parameters. 2679a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the array of parameters or {@code null} if there are no 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parameters. 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object[] getParameters() { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return parameters; 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the parameters. 2779a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param parameters 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array of parameters to set, may be {@code null}. 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setParameters(Object[] parameters) { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.parameters = parameters; 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the resource bundle used to localize the raw message during 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * formatting. 2889a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the associated resource bundle, {@code null} if none is 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * available or the message is not localizable. 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ResourceBundle getResourceBundle() { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return resourceBundle; 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2979a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * Sets the resource bundle used to localize the raw message during 2989a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * formatting. 2999a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundle 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the resource bundle to set, may be {@code null}. 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setResourceBundle(ResourceBundle resourceBundle) { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.resourceBundle = resourceBundle; 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the resource bundle. 3099a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the resource bundle, {@code null} if none is 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * available or the message is not localizable. 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getResourceBundleName() { 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return resourceBundleName; 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the name of the resource bundle. 3199a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param resourceBundleName 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the resource bundle to set. 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setResourceBundleName(String resourceBundleName) { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.resourceBundleName = resourceBundleName; 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the sequence number. 3299a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the sequence number. 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long getSequenceNumber() { 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sequenceNumber; 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the sequence number. It is usually not necessary to call this method 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to change the sequence number because the number is allocated when this 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instance is constructed. 3409a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sequenceNumber 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the sequence number to set. 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setSequenceNumber(long sequenceNumber) { 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sequenceNumber = sequenceNumber; 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the class that is the source of this log record. This 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * information can be changed, may be {@code null} and is untrusted. 3519a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the source class of this log record (possiblity {@code null}) 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSourceClassName() { 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project initSource(); 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sourceClassName; 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Init the sourceClass and sourceMethod fields. 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void initSource() { 363fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes if (sourceInitialized) { 36461c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson return; 36561c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson } 36661c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson 36761c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson boolean sawLogger = false; 36861c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson for (StackTraceElement element : new Throwable().getStackTrace()) { 36961c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson String current = element.getClassName(); 37061c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson if (current.startsWith(Logger.class.getName())) { 37161c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson sawLogger = true; 37261c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson } else if (sawLogger) { 37361c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson this.sourceClassName = element.getClassName(); 37461c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson this.sourceMethodName = element.getMethodName(); 37561c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson break; 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 37861c4cb396a0965bc55e5440b252a23835684b901Jesse Wilson 379fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes sourceInitialized = true; 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the name of the class that is the source of this log record. 3849a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceClassName 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the source class of this log record, may be 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}. 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setSourceClassName(String sourceClassName) { 390fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes sourceInitialized = true; 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sourceClassName = sourceClassName; 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the name of the method that is the source of this log record. 3969a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the name of the source method of this log record. 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSourceMethodName() { 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project initSource(); 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sourceMethodName; 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the name of the method that is the source of this log record. 4069a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sourceMethodName 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the source method of this log record, may be 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}. 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setSourceMethodName(String sourceMethodName) { 412fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes sourceInitialized = true; 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.sourceMethodName = sourceMethodName; 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets a unique ID of the thread originating the log record. Every thread 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * becomes a different ID. 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Notice : the ID doesn't necessary map the OS thread ID 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 4229a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the ID of the thread originating this log record. 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getThreadID() { 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return threadID; 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the ID of the thread originating this log record. 4319a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param threadID 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new ID of the thread originating this log record. 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setThreadID(int threadID) { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.threadID = threadID; 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Gets the {@code Throwable} object associated with this log record. 4419a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code Throwable} object associated with this log record. 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Throwable getThrown() { 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return thrown; 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets the {@code Throwable} object associated with this log record. 4509a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson * 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param thrown 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the new {@code Throwable} object to associate with this log 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * record. 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void setThrown(Throwable thrown) { 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.thrown = thrown; 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Customized serialization. 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream out) throws IOException { 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.defaultWriteObject(); 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.writeByte(MAJOR); 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.writeByte(MINOR); 466b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (parameters == null) { 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.writeInt(-1); 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.writeInt(parameters.length); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Object element : parameters) { 471b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes out.writeObject((element == null) ? null : element.toString()); 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Customized deserialization. 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void readObject(ObjectInputStream in) throws IOException, 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ClassNotFoundException { 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project in.defaultReadObject(); 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte major = in.readByte(); 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte minor = in.readByte(); 4849a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson // only check MAJOR version 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (major != MAJOR) { 4868454d3c5b9778ae359d11cd98ed81c589e951d0aElliott Hughes throw new IOException("Different version " + Byte.valueOf(major) + "." + Byte.valueOf(minor)); 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4889a0fbe99031759393563ee69ac4640f66f182686Jesse Wilson 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int length = in.readInt(); 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (length >= 0) { 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parameters = new Object[length]; 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < parameters.length; i++) { 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project parameters[i] = in.readObject(); 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 496b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes if (resourceBundleName != null) { 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project resourceBundle = Logger.loadResourceBundle(resourceBundleName); 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (MissingResourceException e) { 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Cannot find the specified resource bundle 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project resourceBundle = null; 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 506