1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.shared.trace;
20
21 import java.util.logging.Level;
22 import java.util.logging.Logger;
23
24
25
26
27
28
29
30 public class TracingSupport
31 {
32 private static final Object[] EMPTY_PARAMS = new Object[0];
33
34 private Logger _logger;
35 private Level _level = Level.FINE;
36 private String _sourceClass;
37
38 public TracingSupport()
39 {
40 this(Logger.getAnonymousLogger());
41 }
42
43 public TracingSupport(Class clazz)
44 {
45 this(clazz.getName());
46 }
47
48 public TracingSupport(String className)
49 {
50 this(Logger.getLogger(className));
51 }
52
53 public TracingSupport(Logger logger)
54 {
55 _logger = logger;
56 _sourceClass = logger.getName();
57 }
58
59
60
61
62 public Level getLevel()
63 {
64 return _level;
65 }
66
67
68
69
70
71
72 public void setLevel(Level level)
73 {
74 if (level == null)
75 {
76 throw new IllegalArgumentException("log level can not be null");
77 }
78 _level = level;
79 }
80
81 public <T> T trace(String methodName, Closure<T> closure)
82 {
83 return trace(methodName, closure, EMPTY_PARAMS);
84 }
85
86 public <T> T trace(String methodName, Closure<T> closure, Object... params)
87 {
88 if (_logger.isLoggable(_level))
89 {
90 _logger.logp(_level, _sourceClass, methodName, "ENTRY" + prepareParams(params), params);
91 try
92 {
93 T result = closure.call();
94 if (!Void.class.equals(result))
95 {
96 _logger.logp(_level, _sourceClass, methodName, "RETURN {0}", result);
97 }
98 else
99 {
100 _logger.logp(_level, _sourceClass, methodName, "RETURN");
101 }
102 return result;
103 }
104 catch (RuntimeException e)
105 {
106 _logger.logp(_level, _sourceClass, methodName, "THROW", e);
107 throw e;
108 }
109 }
110 else
111 {
112 return closure.call();
113 }
114 }
115
116 private String prepareParams(Object[] params)
117 {
118 if (params == null || params.length == 0)
119 {
120 return "";
121 }
122 StringBuilder builder = new StringBuilder(" ");
123 for (int i = 0, size = params.length; i < size; i++)
124 {
125 builder.append("{");
126 builder.append(i);
127 builder.append("}");
128 if (i + 1 < size)
129 {
130 builder.append(",");
131 }
132 }
133 return builder.toString();
134 }
135
136 public Logger getLogger()
137 {
138 return _logger;
139 }
140
141
142
143
144
145 public void setLogger(Logger logger)
146 {
147 if (logger == null)
148 {
149 throw new IllegalArgumentException("logger must not be null");
150 }
151 _logger = logger;
152 }
153
154
155
156
157 public String getSourceClass()
158 {
159 return _sourceClass;
160 }
161
162
163
164
165
166 public void setSourceClass(String className)
167 {
168 if (className == null)
169 {
170 throw new IllegalArgumentException("className must not be null");
171 }
172 _sourceClass = className;
173 }
174 }