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