1 /*
2 * This file is part of AceLogger.
3 *
4 * AceLogger is free software: you can redistribute it and/or modify it under the terms of the GNU
5 * Lesser General Public License as published by the Free Software Foundation, either version 3 of
6 * the License, or (at your option) any later version.
7 *
8 * AceLogger is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
9 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * Lesser General Public License for more details.
11 *
12 * You should have received a copy of the GNU Lesser General Public License along with AceLogger.
13 * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
14 */
15 package net.sourceforge.acelogger;
16
17 import java.io.Serializable;
18 import java.util.Date;
19 import java.util.concurrent.atomic.AtomicLong;
20
21 import net.sourceforge.acelogger.constants.LevelFilterConstants;
22 import net.sourceforge.acelogger.level.LogLevel;
23 import net.sourceforge.acelogger.location.LogEventLocation;
24
25 /**
26 * Used to store log event data.
27 *
28 * @author Zardi (https://sourceforge.net/users/daniel_zardi)
29 * @version 1.0.0
30 * @since 1.0.0
31 */
32 public class LogEvent implements Serializable {
33
34 /**
35 * This constant is used when a serialized object is read to ensure that the object is
36 * compatible with the current version of this class. For more info on version changes see
37 * <a href="http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678">
38 * Type Changes Affecting Serialization
39 * </a>.
40 */
41 private static final long serialVersionUID = 1L;
42
43 /**
44 * The time of the first access to this class.
45 */
46 // FIXME: Remove from this class
47 private static final Date START_TIME = new Date();
48
49 /**
50 * Identifier generator. This is used to give a unique identifier to each log event.
51 */
52 // FIXME: Remove from this class
53 private static final AtomicLong LOG_SEQUENCE = new AtomicLong();
54
55 /**
56 * The identifier of this event, this number should be unique.
57 */
58 private long identifier;
59
60 /**
61 * The time this event was generated.
62 */
63 private Date callTime;
64
65 /**
66 * The message to be formatted and logged.
67 */
68 private String message;
69
70 /**
71 * The parameters used to format the message.
72 */
73 private Object[] messageParameters;
74
75 /**
76 * The caller location.
77 */
78 private LogEventLocation location;
79
80 /**
81 * The level of this log event.
82 */
83 private LogLevel level;
84
85 /**
86 * The cause that generated this log event.
87 */
88 private Throwable cause;
89
90 /**
91 * Constructs a new log event using the supplied information.
92 *
93 * @param message
94 * The description for this event.
95 * @param level
96 * The severity level for this event.
97 * @since 1.0.0
98 */
99 public LogEvent(String message, LogLevel level) {
100 this(message, level, new Object[] {});
101 }
102
103 /**
104 * Constructs a new log event using the supplied information.
105 *
106 * @param message
107 * The description for this event.
108 * @param level
109 * The severity level for this event.
110 * @param messageParameters
111 * The parameters to be interpolated into the message.
112 * @since 1.0.0
113 */
114 public LogEvent(String message, LogLevel level, Object... messageParameters) {
115 this(message, level, null, messageParameters);
116 }
117
118 /**
119 * Constructs a new log event using the supplied information.
120 *
121 * @param message
122 * The description for this event.
123 * @param level
124 * The severity level for this event.
125 * @param location
126 * The location that originated this event.
127 * @param messageParameters
128 * The parameters to be interpolated into the message.
129 * @since 1.0.0
130 */
131 public LogEvent(String message, LogLevel level, LogEventLocation location,
132 Object... messageParameters) {
133 this(message, level, location, null, messageParameters);
134 }
135
136 /**
137 * Constructs a new log event using the supplied information.
138 *
139 * @param message
140 * The description for this event.
141 * @param level
142 * The severity level for this event.
143 * @param location
144 * The location that originated this event.
145 * @param cause
146 * The problem that originated this event.
147 * @param messageParameters
148 * The parameters to be interpolated into the message.
149 * @since 1.0.0
150 */
151 public LogEvent(String message, LogLevel level, LogEventLocation location, Throwable cause,
152 Object... messageParameters) {
153 setIdentifier(LOG_SEQUENCE.incrementAndGet());
154 setCallTime(new Date());
155 setMessage(message);
156 setMessageParameters(messageParameters);
157 setLevel(level);
158 setLocation(location);
159 setCause(cause);
160 }
161
162 /**
163 * Gets the level for this log event.
164 *
165 * @return The log event's level.
166 * @since 1.0.0
167 */
168 public final LogLevel getLevel() {
169 return level;
170 }
171
172 /**
173 * Sets the level for this log event.
174 *
175 * @param level
176 * The log event's level.
177 * @since 1.0.0
178 */
179 private final void setLevel(LogLevel level) {
180 if (level == null) {
181 this.level = LevelFilterConstants.DEFAULT_LEVEL;
182 } else {
183 this.level = level;
184 }
185 }
186
187 /**
188 * Gets the identifier for this log event.
189 *
190 * @return The log event's identifier.
191 * @since 1.0.0
192 */
193 public final long getIdentifier() {
194 return identifier;
195 }
196
197 /**
198 * Sets the identifier for this log event.
199 *
200 * @param identifier
201 * The log event's identifier.
202 * @since 1.0.0
203 */
204 private final void setIdentifier(long identifier) {
205 this.identifier = identifier;
206 }
207
208 /**
209 * Gets the call time for this log event.
210 *
211 * @return The log event's call time.
212 * @since 1.0.0
213 */
214 public final Date getCallTime() {
215 return new Date(callTime.getTime());
216 }
217
218 /**
219 * Sets the call time for this log event.
220 *
221 * @param callTime
222 * The log event's call time.
223 * @since 1.0.0
224 */
225 private final void setCallTime(Date callTime) {
226 this.callTime = callTime;
227 }
228
229 /**
230 * Gets the message for this log event.
231 *
232 * @return The log event's message.
233 * @since 1.0.0
234 */
235 public final String getMessage() {
236 return message;
237 }
238
239 /**
240 * Sets the message for this log event.
241 *
242 * @param message
243 * The log event's message.
244 * @since 1.0.0
245 */
246 private final void setMessage(String message) {
247 if (message == null) {
248 this.message = "";
249 } else {
250 this.message = message;
251 }
252 }
253
254 /**
255 * Gets the message parameters for this log event.
256 *
257 * @return The log event's message parameters.
258 * @since 1.0.0
259 */
260 public final Object[] getMessageParameters() {
261 Object[] parametersCopy = new Object[messageParameters.length];
262 System.arraycopy(messageParameters, 0, parametersCopy, 0, messageParameters.length);
263 return parametersCopy;
264 }
265
266 /**
267 * Sets the message parameters for this log event.
268 *
269 * @param parameters
270 * The log event's message parameters.
271 * @since 1.0.0
272 */
273 private final void setMessageParameters(Object[] parameters) {
274 if (parameters == null || parameters.length == 0) {
275 this.messageParameters = new Object[] {};
276 } else {
277 this.messageParameters = new Object[parameters.length];
278 System.arraycopy(parameters, 0, this.messageParameters, 0, parameters.length);
279 }
280 }
281
282 /**
283 * Gets the call location for this log event.
284 *
285 * @return The log event's call location.
286 * @since 1.0.0
287 */
288 public final LogEventLocation getLocation() {
289 return location;
290 }
291
292 /**
293 * Sets the call location for this log event.
294 *
295 * @param location
296 * The log event's call location.
297 * @since 1.0.0
298 */
299 private final void setLocation(LogEventLocation location) {
300 if (location == null) {
301 this.location = new LogEventLocation();
302 } else {
303 this.location = location;
304 }
305 }
306
307 /**
308 * Gets the cause for this log event.
309 *
310 * @return The log event's cause.
311 * @since 1.0.0
312 */
313 public final Throwable getCause() {
314 return cause;
315 }
316
317 /**
318 * Sets the cause for this log event.
319 *
320 * @param cause
321 * The log event's cause.
322 * @since 1.0.0
323 */
324 private final void setCause(Throwable cause) {
325 this.cause = cause;
326 }
327
328 /**
329 * Gets the start time for the application.
330 *
331 * @return The log system's start time.
332 * @since 1.0.0
333 */
334 public static final Date getStartTime() {
335 return new Date(START_TIME.getTime());
336 }
337
338 }