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.common.IdleStatus;
25 import org.apache.mina.common.IoEventType;
26 import org.apache.mina.common.IoFilter;
27 import org.apache.mina.common.IoFilterAdapter;
28 import org.apache.mina.common.IoSession;
29 import org.apache.mina.common.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 this.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 private void log(IoEventType eventType, String format, Object arg) {
133 getLogLevel(eventType).log(logger, format, new Object[] { arg });
134 }
135
136
137
138
139
140
141
142 public void setExceptionCaughtLogLevel(LogLevel logLevel) {
143 setLogLevel(IoEventType.EXCEPTION_CAUGHT, logLevel);
144 }
145
146
147
148
149
150
151
152 public void setMessageReceivedLogLevel(LogLevel logLevel) {
153 setLogLevel(IoEventType.MESSAGE_RECEIVED, logLevel);
154 }
155
156
157
158
159
160
161
162 public void setMessageSentLogLevel(LogLevel logLevel) {
163 setLogLevel(IoEventType.MESSAGE_SENT, logLevel);
164 }
165
166
167
168
169
170
171
172 public void setSessionClosedLogLevel(LogLevel logLevel) {
173 setLogLevel(IoEventType.SESSION_CLOSED, logLevel);
174 }
175
176
177
178
179
180
181
182 public void setSessionCreatedLogLevel(LogLevel logLevel) {
183 setLogLevel(IoEventType.SESSION_CREATED, logLevel);
184 }
185
186
187
188
189
190
191
192 public void setSessionIdleLogLevel(LogLevel logLevel) {
193 setLogLevel(IoEventType.SESSION_IDLE, logLevel);
194 }
195
196
197
198
199
200
201
202 public void setSessionOpenedLogLevel(LogLevel logLevel) {
203 setLogLevel(IoEventType.SESSION_OPENED, logLevel);
204 }
205
206
207
208
209
210
211
212
213
214
215 public void setLogLevel(IoEventType eventType, LogLevel logLevel) {
216 if (eventType == null) {
217 throw new NullPointerException("eventType");
218 }
219 if (logLevel == null) {
220 throw new NullPointerException("logLevel");
221 }
222
223 logSettings.put(eventType, logLevel);
224 }
225
226
227
228
229
230
231 public LogLevel getLogLevel(IoEventType eventType) {
232 if (eventType == null) {
233 throw new NullPointerException("eventType");
234 }
235
236 return logSettings.get(eventType);
237 }
238
239
240
241
242
243
244
245
246 public LogLevel getExceptionCaughtLogLevel() {
247 return getLogLevel(IoEventType.EXCEPTION_CAUGHT);
248 }
249
250
251
252
253
254
255
256
257 public LogLevel getMessageReceivedLogLevel() {
258 return getLogLevel(IoEventType.MESSAGE_RECEIVED);
259 }
260
261
262
263
264
265
266
267
268 public LogLevel getMessageSentLogLevel() {
269 return getLogLevel(IoEventType.MESSAGE_SENT);
270 }
271
272
273
274
275
276
277
278
279 public LogLevel getSessionClosedLogLevel() {
280 return getLogLevel(IoEventType.SESSION_CLOSED);
281 }
282
283
284
285
286
287
288
289
290 public LogLevel getSessionCreatedLogLevel() {
291 return getLogLevel(IoEventType.SESSION_CREATED);
292 }
293
294
295
296
297
298
299
300
301 public LogLevel getSessionIdleLogLevel() {
302 return getLogLevel(IoEventType.SESSION_IDLE);
303 }
304
305
306
307
308
309
310
311
312 public LogLevel getSessionOpenedLogLevel() {
313 return getLogLevel(IoEventType.SESSION_OPENED);
314 }
315 }