View Javadoc

1   /*
2    * $Id: CommonsLogger.java,v 1.18 2011/06/16 09:29:41 jbmeslin Exp $
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   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
25   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:41 $
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 }