View Javadoc

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