1
2
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
22
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 }