1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.filter.logging;
21
22 import java.util.Map;
23
24 import org.apache.mina.core.filterchain.IoFilter;
25 import org.apache.mina.core.filterchain.IoFilterAdapter;
26 import org.apache.mina.core.session.IdleStatus;
27 import org.apache.mina.core.session.IoEventType;
28 import org.apache.mina.core.session.IoSession;
29 import org.apache.mina.core.write.WriteRequest;
30 import org.apache.mina.util.CopyOnWriteMap;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 public class LoggingFilter extends IoFilterAdapter {
48
49 private final Map<IoEventType, LogLevel> logSettings = new CopyOnWriteMap<IoEventType, LogLevel>();
50 private final String name;
51 private final Logger logger;
52
53
54
55 public LoggingFilter() {
56 this(LoggingFilter.class.getName());
57 }
58
59 public LoggingFilter(Class<?> clazz) {
60 this(clazz.getName());
61 }
62
63 public LoggingFilter(String name) {
64 if (name == null) {
65 throw new NullPointerException("name should not be null");
66 }
67 this.name = name;
68 logger = LoggerFactory.getLogger(name);
69
70
71 setLogLevel(IoEventType.EXCEPTION_CAUGHT, LogLevel.WARN);
72 setLogLevel(IoEventType.MESSAGE_RECEIVED, LogLevel.INFO);
73 setLogLevel(IoEventType.MESSAGE_SENT, LogLevel.INFO);
74 setLogLevel(IoEventType.SESSION_CLOSED, LogLevel.INFO);
75 setLogLevel(IoEventType.SESSION_CREATED, LogLevel.INFO);
76 setLogLevel(IoEventType.SESSION_IDLE, LogLevel.INFO);
77 setLogLevel(IoEventType.SESSION_OPENED, LogLevel.INFO);
78 }
79
80 public String getName() {
81 return name;
82 }
83
84 @Override
85 public void exceptionCaught(NextFilter nextFilter, IoSession session,
86 Throwable cause) throws Exception {
87 getLogLevel(IoEventType.EXCEPTION_CAUGHT).log(logger, "EXCEPTION: ", cause);
88 nextFilter.exceptionCaught(session, cause);
89 }
90
91 @Override
92 public void messageReceived(NextFilter nextFilter, IoSession session,
93 Object message) throws Exception {
94 log(IoEventType.MESSAGE_RECEIVED, "RECEIVED: {}", message);
95 nextFilter.messageReceived(session, message);
96 }
97
98 @Override
99 public void messageSent(NextFilter nextFilter, IoSession session,
100 WriteRequest writeRequest) throws Exception {
101 log(IoEventType.MESSAGE_SENT, "SENT: {}", writeRequest.getMessage());
102 nextFilter.messageSent(session, writeRequest);
103 }
104
105 @Override
106 public void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception {
107 log(IoEventType.SESSION_CLOSED, "CLOSED", null);
108 nextFilter.sessionClosed(session);
109 }
110
111 @Override
112 public void sessionCreated(NextFilter nextFilter, IoSession session)
113 throws Exception {
114 log(IoEventType.SESSION_CREATED, "CREATED", null);
115 nextFilter.sessionCreated(session);
116 }
117
118 @Override
119 public void sessionIdle(NextFilter nextFilter, IoSession session,
120 IdleStatus status) throws Exception {
121 log(IoEventType.SESSION_IDLE, "IDLE: {}", status);
122 nextFilter.sessionIdle(session, status);
123 }
124
125 @Override
126 public void sessionOpened(NextFilter nextFilter, IoSession session)
127 throws Exception {
128 log(IoEventType.SESSION_OPENED, "OPENED", null);
129 nextFilter.sessionOpened(session);
130 }
131
132
133
134
135
136
137
138
139 protected void log(IoEventType eventType, String format, Object arg) {
140 getLogLevel(eventType).log(logger, format, arg);
141 }
142
143
144
145
146
147
148
149 public void setExceptionCaughtLogLevel(LogLevel logLevel) {
150 setLogLevel(IoEventType.EXCEPTION_CAUGHT, logLevel);
151 }
152
153
154
155
156
157
158
159 public void setMessageReceivedLogLevel(LogLevel logLevel) {
160 setLogLevel(IoEventType.MESSAGE_RECEIVED, logLevel);
161 }
162
163
164
165
166
167
168
169 public void setMessageSentLogLevel(LogLevel logLevel) {
170 setLogLevel(IoEventType.MESSAGE_SENT, logLevel);
171 }
172
173
174
175
176
177
178
179 public void setSessionClosedLogLevel(LogLevel logLevel) {
180 setLogLevel(IoEventType.SESSION_CLOSED, logLevel);
181 }
182
183
184
185
186
187
188
189 public void setSessionCreatedLogLevel(LogLevel logLevel) {
190 setLogLevel(IoEventType.SESSION_CREATED, logLevel);
191 }
192
193
194
195
196
197
198
199 public void setSessionIdleLogLevel(LogLevel logLevel) {
200 setLogLevel(IoEventType.SESSION_IDLE, logLevel);
201 }
202
203
204
205
206
207
208
209 public void setSessionOpenedLogLevel(LogLevel logLevel) {
210 setLogLevel(IoEventType.SESSION_OPENED, logLevel);
211 }
212
213
214
215
216
217
218
219
220
221
222 public void setLogLevel(IoEventType eventType, LogLevel logLevel) {
223 if (eventType == null) {
224 throw new NullPointerException("eventType");
225 }
226 if (logLevel == null) {
227 throw new NullPointerException("logLevel");
228 }
229
230 logSettings.put(eventType, logLevel);
231 }
232
233
234
235
236
237
238 public LogLevel getLogLevel(IoEventType eventType) {
239 if (eventType == null) {
240 throw new NullPointerException("eventType");
241 }
242
243 return logSettings.get(eventType);
244 }
245
246
247
248
249
250
251
252
253 public LogLevel getExceptionCaughtLogLevel() {
254 return getLogLevel(IoEventType.EXCEPTION_CAUGHT);
255 }
256
257
258
259
260
261
262
263
264 public LogLevel getMessageReceivedLogLevel() {
265 return getLogLevel(IoEventType.MESSAGE_RECEIVED);
266 }
267
268
269
270
271
272
273
274
275 public LogLevel getMessageSentLogLevel() {
276 return getLogLevel(IoEventType.MESSAGE_SENT);
277 }
278
279
280
281
282
283
284
285
286 public LogLevel getSessionClosedLogLevel() {
287 return getLogLevel(IoEventType.SESSION_CLOSED);
288 }
289
290
291
292
293
294
295
296
297 public LogLevel getSessionCreatedLogLevel() {
298 return getLogLevel(IoEventType.SESSION_CREATED);
299 }
300
301
302
303
304
305
306
307
308 public LogLevel getSessionIdleLogLevel() {
309 return getLogLevel(IoEventType.SESSION_IDLE);
310 }
311
312
313
314
315
316
317
318
319 public LogLevel getSessionOpenedLogLevel() {
320 return getLogLevel(IoEventType.SESSION_OPENED);
321 }
322 }