1 /**
2 * Logback: the reliable, generic, fast and flexible logging framework.
3 * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
4 *
5 * This program and the accompanying materials are dual-licensed under
6 * either the terms of the Eclipse Public License v1.0 as published by
7 * the Eclipse Foundation
8 *
9 * or (per the licensee's choosing)
10 *
11 * under the terms of the GNU Lesser General Public License version 2.1
12 * as published by the Free Software Foundation.
13 */
14 package ch.qos.logback.classic.spi;
15
16 import java.time.Instant;
17 import java.util.List;
18 import java.util.Map;
19
20 import org.slf4j.Marker;
21 import org.slf4j.event.KeyValuePair;
22
23 import ch.qos.logback.classic.Level;
24 import ch.qos.logback.core.spi.DeferredProcessingAware;
25
26 /**
27 * The central interface in logback-classic. In a nutshell, logback-classic is
28 * nothing more than a processing chain built around this interface.
29 *
30 * @author Ceki Gülcü
31 * @since 0.9.16
32 */
33 public interface ILoggingEvent extends DeferredProcessingAware {
34
35 String getThreadName();
36
37 Level getLevel();
38
39 String getMessage();
40
41 Object[] getArgumentArray();
42
43 String getFormattedMessage();
44
45 String getLoggerName();
46
47 LoggerContextVO getLoggerContextVO();
48
49 IThrowableProxy getThrowableProxy();
50
51 /**
52 * Return caller data associated with this event. Note that calling this event
53 * may trigger the computation of caller data.
54 *
55 * @return the caller data associated with this event.
56 *
57 * @see #hasCallerData()
58 */
59 StackTraceElement[] getCallerData();
60
61 /**
62 * If this event has caller data, then true is returned. Otherwise the returned
63 * value is null.
64 *
65 * <p>
66 * Logback components wishing to use caller data if available without causing it
67 * to be computed can invoke this method before invoking
68 * {@link #getCallerData()}.
69 *
70 * @return whether this event has caller data
71 */
72 boolean hasCallerData();
73
74 /**
75 * Returns the first marker is the marker list or null if no markers are
76 * available.
77 *
78 * This method is deprecated and exists solely for backward compatibility
79 * reasons. Logback components should use {@link #getMarkerList()} and cater for
80 * all available markers and not only the first one.
81 *
82 * @deprecated Replaced by {@link #getMarkerList()}
83 * @return the first marker in the marker list or null if no markers are
84 * available
85 */
86 default Marker getMarker() {
87 List<Marker> markers = getMarkerList();
88 if (markers == null || markers.isEmpty())
89 return null;
90
91 // return the first marker. Assuming that only the first marker is useful
92 // is obviously incorrect. However, we have no other choice if we wish
93 // to preserve binary compatibility.
94 return markers.get(0);
95 }
96
97 /**
98 * Since SLF4J 2.0.0, the slf4j logging API assumes the possibility of multiple
99 * Marker instances in a logging event. Consequently, ILoggingEvent needs to
100 * cater for this possibility.
101 *
102 * @return the marker list, may be null
103 * @since 1.3.0
104 */
105 List<Marker> getMarkerList();
106
107 /**
108 * Returns the MDC map. The returned value can be an empty map but not null.
109 */
110 Map<String, String> getMDCPropertyMap();
111
112 /**
113 * Synonym for [@link #getMDCPropertyMap}.
114 *
115 * @deprecated Replaced by [@link #getMDCPropertyMap}
116 */
117 Map<String, String> getMdc();
118
119 /**
120 * Return the number of elapsed milliseconds since epoch.
121 *
122 * @return the number of elapsed milliseconds since epoch
123 * @since 1.3
124 */
125 long getTimeStamp();
126
127 /**
128 * Return the number of elapsed nanoseconds found in {@link #getInstant()}
129 *
130 * May return -1 if data unavailable.
131 *
132 * @return the number of elapsed nanoseconds as found in {@link #getInstant()}
133 * @since 1.3
134 */
135 int getNanoseconds();
136
137 /**
138 * Return the {@link java.time.Instant Instant} the event was created.
139 *
140 * Default implementation returns the instant corresponding to the value returned by @link
141 * {@link #getTimeStamp()}.
142 *
143 * @return the {@link java.time.Instant Instant} the event was created.
144 * @since 1.3
145 */
146 default Instant getInstant() {
147 return Instant.ofEpochMilli(getTimeStamp());
148 }
149
150 /**
151 * The sequence number associated with this event.
152 *
153 * <p>
154 * Sequence numbers, if present, should be increasing monotonically.
155 *
156 * @since 1.3.0
157 */
158 long getSequenceNumber();
159
160 /**
161 * A list of {@link KeyValuePair} objects. The returned list may be null.
162 *
163 * @return may be null
164 * @since 1.3.0
165 */
166 List<KeyValuePair> getKeyValuePairs();
167
168 void prepareForDeferredProcessing();
169
170 }