1
2
3
4 package org.rcfaces.core.internal.service.log;
5
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.StringTokenizer;
11
12 import javax.faces.component.UIViewRoot;
13 import javax.faces.context.FacesContext;
14
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogConfigurationException;
17 import org.apache.commons.logging.LogFactory;
18 import org.rcfaces.core.internal.Constants;
19 import org.rcfaces.core.internal.service.log.LogService.IFilter;
20 import org.rcfaces.core.internal.service.log.LogService.ILogger;
21
22
23
24
25
26
27 public class CommonsLogger implements ILogger {
28 private static final String REVISION = "$Revision: 1.18 $";
29
30 private static final Log LOG = LogFactory.getLog(CommonsLogger.class);
31
32 private static final String DEFAULT_LOG_LEVEL_PARAMETER = Constants
33 .getPackagePrefix()
34 + ".client.DEFAULT_LOG_LEVEL";
35
36 private static final String LOG_LEVELS_PARAMETER = Constants
37 .getPackagePrefix()
38 + ".client.LOG_LEVELS";
39
40 private static final Map LOG_LEVELS = new HashMap(8);
41
42 static {
43 LOG_LEVELS.put("FATAL", new Integer(0));
44 LOG_LEVELS.put("ERROR", new Integer(1));
45 LOG_LEVELS.put("WARN", new Integer(2));
46 LOG_LEVELS.put("INFO", new Integer(3));
47 LOG_LEVELS.put("DEBUG", new Integer(4));
48 LOG_LEVELS.put("TRACE", new Integer(5));
49 }
50
51 private IFilter filters[];
52
53 public void logException(FacesContext facesContext, UIViewRoot viewRoot,
54 String name, long date, String message, int level, Throwable ex) {
55
56 if (name != null) {
57 try {
58 Log log = LogFactory.getLog(LogService.PREFIX_LOGGER_NAME + "."
59 + name);
60 if (log != null) {
61 if (level < 0) {
62 level = 0;
63
64 } else if (level > 5) {
65 level = 5;
66 }
67
68 switch (level) {
69 case 0:
70 log.fatal(message, ex);
71 return;
72
73 case 1:
74 log.error(message, ex);
75 return;
76
77 case 2:
78 log.warn(message, ex);
79 return;
80
81 case 3:
82 log.info(message, ex);
83 return;
84
85 case 4:
86 log.debug(message, ex);
87 return;
88
89 case 5:
90 log.trace(message, ex);
91 return;
92 }
93 }
94
95 } catch (LogConfigurationException logException) {
96 LOG.error("Can not log '" + name + "'.", logException);
97 }
98 }
99
100 if (LOG.isDebugEnabled()) {
101 LOG.trace("Name=" + name);
102 LOG.trace(" level=" + level);
103 LOG.trace(" message=" + message);
104 LOG.trace(" exception=" + ex);
105 }
106 }
107
108 public synchronized IFilter[] listFilters(FacesContext facesContext) {
109 if (verifyFilters(facesContext)) {
110 return filters;
111 }
112
113 filters = loadFilters(facesContext);
114
115 return filters;
116 }
117
118 protected boolean verifyFilters(FacesContext facesContext) {
119 return (filters != null);
120 }
121
122 protected IFilter[] loadFilters(FacesContext facesContext) {
123
124 Map initParameters = facesContext.getExternalContext()
125 .getInitParameterMap();
126
127 List l = new ArrayList();
128
129 String level = (String) initParameters.get(DEFAULT_LOG_LEVEL_PARAMETER);
130 if (level != null) {
131 Integer i = (Integer) LOG_LEVELS.get(level.toUpperCase());
132 if (i != null) {
133 l.add(new LogService.Filter(i.intValue(), ""));
134 }
135 }
136
137 String levels = (String) initParameters.get(LOG_LEVELS_PARAMETER);
138 if (levels != null) {
139 for (StringTokenizer st = new StringTokenizer(levels, ", "); st
140 .hasMoreTokens();) {
141 String token = st.nextToken();
142
143 int idx = token.indexOf('=');
144 if (idx < 0) {
145 continue;
146 }
147
148 String name = token.substring(0, idx);
149 level = token.substring(idx + 1);
150 Integer i = (Integer) LOG_LEVELS.get(level.toUpperCase());
151 if (i == null) {
152 continue;
153 }
154
155 l.add(new LogService.Filter(i.intValue(), name));
156 }
157 }
158
159 if (l.isEmpty()) {
160 return LogService.EMPTY_FILTERS;
161 }
162
163 return (IFilter[]) l.toArray(new IFilter[l.size()]);
164 }
165 }