001: /* ====================================================================
002: * The Apache Software License, Version 1.1
003: *
004: * Copyright (c) 1997-2003 The Apache Software Foundation. All rights
005: * reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by the
022: * Apache Software Foundation (http://www.apache.org/)."
023: * Alternately, this acknowledgment may appear in the software
024: * itself, if and wherever such third-party acknowledgments
025: * normally appear.
026: *
027: * 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
028: * must not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation. For more
052: * information on the Apache Software Foundation, please see
053: * <http://www.apache.org/>.
054: */
055: package org.apache.log;
056:
057: import java.io.ObjectStreamException;
058: import java.io.Serializable;
059:
060: /**
061: * This class encapsulates each individual log event.
062: * LogEvents usually originate at a Logger and are routed
063: * to LogTargets.
064: *
065: * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
066: * @author <a href="mailto:peter@apache.org">Peter Donald</a>
067: */
068: public final class LogEvent implements Serializable {
069: //A Constant used when retrieving time relative to start of applicaiton start
070: private static final long START_TIME = System.currentTimeMillis();
071:
072: ///The category that this LogEvent concerns. (Must not be null)
073: private String m_category;
074:
075: ///The message to be logged. (Must not be null)
076: private String m_message;
077:
078: ///The exception that caused LogEvent if any. (May be null)
079: private Throwable m_throwable;
080:
081: ///The time in millis that LogEvent occurred
082: private long m_time;
083:
084: ///The priority of LogEvent. (Must not be null)
085: private Priority m_priority;
086:
087: ///The context map associated with LogEvent. (May be null).
088: private ContextMap m_contextMap;
089:
090: /**
091: * The context stack associated with LogEvent. (May be null)
092: * @deprecated ContextStack has been deprecated and thus so has this field.
093: */
094: private transient ContextStack m_contextStack;
095:
096: /**
097: * Get Priority for LogEvent.
098: *
099: * @return the LogEvent Priority
100: */
101: public final Priority getPriority() {
102: return m_priority;
103: }
104:
105: /**
106: * Set the priority of LogEvent.
107: *
108: * @param priority the new LogEvent priority
109: */
110: public final void setPriority(final Priority priority) {
111: m_priority = priority;
112: }
113:
114: /**
115: * Get ContextMap associated with LogEvent
116: *
117: * @return the ContextMap
118: */
119: public final ContextMap getContextMap() {
120: return m_contextMap;
121: }
122:
123: /**
124: * Set the ContextMap for this LogEvent.
125: *
126: * @param contextMap the context map
127: */
128: public final void setContextMap(final ContextMap contextMap) {
129: m_contextMap = contextMap;
130: }
131:
132: /**
133: * Get ContextStack associated with LogEvent
134: *
135: * @return the ContextStack
136: * @deprecated ContextStack has been deprecated and thus so has this method
137: */
138: public final ContextStack getContextStack() {
139: return m_contextStack;
140: }
141:
142: /**
143: * Set the ContextStack for this LogEvent.
144: * Note that if this LogEvent ever changes threads, the
145: * ContextStack must be cloned.
146: *
147: * @param contextStack the context stack
148: * @deprecated ContextStack has been deprecated and thus so has this method
149: */
150: public final void setContextStack(final ContextStack contextStack) {
151: m_contextStack = contextStack;
152: }
153:
154: /**
155: * Get the category that LogEvent relates to.
156: *
157: * @return the name of category
158: */
159: public final String getCategory() {
160: return m_category;
161: }
162:
163: /**
164: * Get the message associated with event.
165: *
166: * @return the message
167: */
168: public final String getMessage() {
169: return m_message;
170: }
171:
172: /**
173: * Get throwabe instance associated with event.
174: *
175: * @return the Throwable
176: */
177: public final Throwable getThrowable() {
178: return m_throwable;
179: }
180:
181: /**
182: * Get the absolute time of the log event.
183: *
184: * @return the absolute time
185: */
186: public final long getTime() {
187: return m_time;
188: }
189:
190: /**
191: * Get the time of the log event relative to start of application.
192: *
193: * @return the time
194: */
195: public final long getRelativeTime() {
196: return m_time - START_TIME;
197: }
198:
199: /**
200: * Set the LogEvent category.
201: *
202: * @param category the category
203: */
204: public final void setCategory(final String category) {
205: m_category = category;
206: }
207:
208: /**
209: * Set the message for LogEvent.
210: *
211: * @param message the message
212: */
213: public final void setMessage(final String message) {
214: m_message = message;
215: }
216:
217: /**
218: * Set the throwable for LogEvent.
219: *
220: * @param throwable the instance of Throwable
221: */
222: public final void setThrowable(final Throwable throwable) {
223: m_throwable = throwable;
224: }
225:
226: /**
227: * Set the absolute time of LogEvent.
228: *
229: * @param time the time
230: */
231: public final void setTime(final long time) {
232: m_time = time;
233: }
234:
235: /**
236: * Helper method that replaces deserialized priority with correct singleton.
237: *
238: * @return the singleton version of object
239: * @exception ObjectStreamException if an error occurs
240: */
241: private Object readResolve() throws ObjectStreamException {
242: if (null == m_category) {
243: m_category = "";
244: }
245: if (null == m_message) {
246: m_message = "";
247: }
248:
249: String priorityName = "";
250: if (null != m_priority) {
251: priorityName = m_priority.getName();
252: }
253:
254: m_priority = Priority.getPriorityForName(priorityName);
255:
256: return this;
257: }
258: }
|