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