View Javadoc

1   /*
2    * $Id: Log4jLogger.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.Enumeration;
8   import java.util.List;
9   
10  import javax.faces.component.UIViewRoot;
11  import javax.faces.context.FacesContext;
12  
13  import org.apache.log4j.Level;
14  import org.apache.log4j.LogManager;
15  import org.apache.log4j.Logger;
16  import org.apache.log4j.spi.LoggingEvent;
17  import org.rcfaces.core.internal.service.log.LogService.IFilter;
18  
19  /**
20   * 
21   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
22   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:41 $
23   */
24  class Log4jLogger implements LogService.ILogger {
25  
26      private static final String REVISION = "$Revision: 1.18 $";
27  
28      private IFilter filters[];
29  
30      public void logException(FacesContext facesContext, UIViewRoot viewRoot,
31              String name, long date, String message, int level,
32              Throwable exception) {
33  
34          Logger logger = Logger.getLogger(name);
35  
36          if (logger.getLoggerRepository().isDisabled(level) == false) {
37              return;
38          }
39  
40          Level levelObject = convertIntToLevel(level);
41  
42          logger.callAppenders(new LoggingEvent(name, logger, date, levelObject,
43                  message, exception));
44      }
45  
46      public synchronized IFilter[] listFilters(FacesContext facesContext) {
47          if (filters != null) {
48              return filters;
49          }
50  
51          List l = null;
52  
53          Enumeration loggers = LogManager.getCurrentLoggers();
54  
55          for (; loggers.hasMoreElements();) {
56              Logger logger = (Logger) loggers.nextElement();
57  
58              String name = logger.getName();
59              if (name.startsWith(LogService.PREFIX_LOGGER_NAME) == false) {
60                  continue;
61              }
62  
63              name = name.substring(LogService.PREFIX_LOGGER_NAME.length());
64              if (name.length() > 0 && name.charAt(0) == '.') {
65                  name = name.substring(1);
66              }
67  
68              int level = convertLevelToInt(logger.getEffectiveLevel());
69  
70              if (l == null) {
71                  l = new ArrayList();
72              }
73  
74              l.add(new LogService.Filter(level, name));
75          }
76  
77          if (l == null) {
78              return LogService.EMPTY_FILTERS;
79          }
80  
81          return (LogService.Filter[]) l.toArray(new LogService.Filter[l.size()]);
82      }
83  
84      private static final int convertLevelToInt(Level level) {
85          int l = level.toInt();
86          if (l >= Level.FATAL.toInt()) {
87              return 0;
88          }
89          if (l >= Level.ERROR.toInt()) {
90              return 1;
91          }
92          if (l >= Level.WARN.toInt()) {
93              return 2;
94          }
95          if (l >= Level.INFO.toInt()) {
96              return 3;
97          }
98          if (l >= Level.DEBUG.toInt()) {
99              return 4;
100         }
101 
102         return 5;
103     }
104 
105     private static final Level convertIntToLevel(int level) {
106         switch (level) {
107         case 0:
108             return Level.FATAL;
109 
110         case 1:
111             return Level.ERROR;
112 
113         case 2:
114             return Level.WARN;
115 
116         case 3:
117             return Level.INFO;
118 
119         default:
120             return Level.DEBUG;
121         }
122     }
123 }