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.nio.ByteBuffer;
23
24 import org.apache.mina.api.IdleStatus;
25 import org.apache.mina.api.IoFilter;
26 import org.apache.mina.api.IoSession;
27 import org.apache.mina.filterchain.ReadFilterChainController;
28 import org.apache.mina.filterchain.WriteFilterChainController;
29 import org.apache.mina.session.WriteRequest;
30 import org.apache.mina.util.ByteBufferDumper;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39
40 public class LoggingFilter implements IoFilter {
41
42
43 private final Logger logger;
44
45
46 private LogLevel messageWritingLevel = LogLevel.INFO;
47
48
49 private LogLevel messageSentLevel = LogLevel.INFO;
50
51
52 private LogLevel messageReceivedLevel = LogLevel.INFO;
53
54
55 private LogLevel sessionOpenedLevel = LogLevel.INFO;
56
57
58 private LogLevel sessionClosedLevel = LogLevel.INFO;
59
60
61 private LogLevel sessionIdleLevel = LogLevel.INFO;
62
63
64
65
66 public LoggingFilter() {
67 this(LoggingFilter.class.getName());
68 }
69
70
71
72
73
74
75 public LoggingFilter(final Class<?> clazz) {
76 this(clazz.getName());
77 }
78
79
80
81
82
83
84 public LoggingFilter(final String name) {
85 if (name == null) {
86 logger = LoggerFactory.getLogger(LoggingFilter.class.getName());
87 } else {
88 logger = LoggerFactory.getLogger(name);
89 }
90 }
91
92
93
94
95
96
97
98
99 private void log(final LogLevel eventLevel, final String message, final Object param) {
100 switch (eventLevel) {
101 case TRACE:
102 logger.trace(message, param);
103 return;
104 case DEBUG:
105 logger.debug(message, param);
106 return;
107 case INFO:
108 logger.info(message, param);
109 return;
110 case WARN:
111 logger.warn(message, param);
112 return;
113 case ERROR:
114 logger.error(message, param);
115 return;
116 default:
117 return;
118 }
119 }
120
121
122
123
124
125
126
127 private void log(final LogLevel eventLevel, final String message) {
128 switch (eventLevel) {
129 case TRACE:
130 logger.trace(message);
131 return;
132 case DEBUG:
133 logger.debug(message);
134 return;
135 case INFO:
136 logger.info(message);
137 return;
138 case WARN:
139 logger.warn(message);
140 return;
141 case ERROR:
142 logger.error(message);
143 return;
144 default:
145 return;
146 }
147 }
148
149
150
151
152 @Override
153 public void sessionOpened(final IoSession session) {
154 log(sessionOpenedLevel, "OPENED");
155
156 }
157
158
159
160
161 @Override
162 public void sessionClosed(final IoSession session) {
163 log(sessionClosedLevel, "CLOSED");
164 }
165
166
167
168
169 @Override
170 public void sessionIdle(final IoSession session, final IdleStatus status) {
171 log(sessionIdleLevel, "IDLE");
172 }
173
174
175
176
177 @Override
178 public void messageSent(final IoSession session, final Object message) {
179 log(messageSentLevel, "IDLE");
180 }
181
182
183
184
185 @Override
186 public void messageReceived(final IoSession session, final Object message,
187 final ReadFilterChainController controller) {
188 if (message instanceof ByteBuffer) {
189 log(messageReceivedLevel, "RECEIVED: {}", ByteBufferDumper.dump((ByteBuffer) message));
190 } else {
191 log(messageReceivedLevel, "RECEIVED: {}", message);
192 }
193
194 controller.callReadNextFilter(message);
195 }
196
197
198
199
200 @Override
201 public void messageWriting(final IoSession session, final WriteRequest message,
202 final WriteFilterChainController controller) {
203 log(messageReceivedLevel, "WRITTING: {}", message);
204 controller.callWriteNextFilter(message);
205 }
206
207
208
209
210
211
212
213
214
215
216 public void setMessageReceivedLogLevel(final LogLevel level) {
217 messageReceivedLevel = level;
218 }
219
220
221
222
223
224
225 public LogLevel getMessageReceivedLogLevel() {
226 return messageReceivedLevel;
227 }
228
229
230
231
232
233
234 public void setMessageWritingLogLevel(final LogLevel level) {
235 messageWritingLevel = level;
236 }
237
238
239
240
241
242
243 public LogLevel getMessageWritingLogLevel() {
244 return messageWritingLevel;
245 }
246
247
248
249
250
251
252 public void setSessionOpenedLogLevel(final LogLevel level) {
253 sessionOpenedLevel = level;
254 }
255
256
257
258
259
260
261 public LogLevel getSessionOpenedLogLevel() {
262 return sessionOpenedLevel;
263 }
264
265
266
267
268
269
270 public void setSessionIdleLogLevel(final LogLevel level) {
271 sessionIdleLevel = level;
272 }
273
274
275
276
277
278
279 public LogLevel getSessionIdleLogLevel() {
280 return sessionIdleLevel;
281 }
282
283
284
285
286
287
288 public void setSessionClosedLogLevel(final LogLevel level) {
289 sessionClosedLevel = level;
290 }
291
292
293
294
295
296
297 public LogLevel getSessionClosedLogLevel() {
298 return sessionClosedLevel;
299 }
300
301
302
303
304
305
306 public LogLevel getMessageSentLevel() {
307 return messageSentLevel;
308 }
309
310
311
312
313
314
315 public void setMessageSentLevel(final LogLevel messageSentLevel) {
316 this.messageSentLevel = messageSentLevel;
317 }
318
319 }