1 package org.apache.commons.jcs3.log;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import java.util.ArrayList;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.ServiceConfigurationError;
24 import java.util.ServiceLoader;
25
26
27
28
29
30
31
32 public class LogManager
33 {
34
35
36
37 private static String logSystem;
38
39
40 public static final String LOGSYSTEM_JAVA_UTIL_LOGGING = "jul";
41 public static final String LOGSYSTEM_LOG4J2 = "log4j2";
42
43
44
45
46 private static class LogFactoryHolder
47 {
48 static final LogFactory INSTANCE = createLogFactory();
49
50
51
52
53
54
55
56 private static LogFactory createLogFactory()
57 {
58 final ServiceLoader<LogFactory> factories = ServiceLoader.load(LogFactory.class);
59 if (LogManager.logSystem == null)
60 {
61 LogManager.logSystem = System.getProperty("jcs.logSystem",
62 LOGSYSTEM_JAVA_UTIL_LOGGING);
63 }
64
65
66 List<ServiceConfigurationError> errors = new ArrayList<>();
67 Iterator<LogFactory> itr = factories.iterator();
68 LogFactory factory = null;
69 while (itr.hasNext())
70 {
71 try
72 {
73 LogFactory instance = itr.next();
74 if (logSystem.equalsIgnoreCase(instance.getName()))
75 {
76 factory = instance;
77 break;
78 }
79 }
80 catch (ServiceConfigurationError e)
81 {
82 errors.add(e);
83 }
84 }
85 if (factory != null)
86 {
87 if (!errors.isEmpty())
88 {
89 Log log = factory.getLog(LogFactoryHolder.class);
90
91 for (ServiceConfigurationError error : errors)
92 {
93 log.debug("Error loading LogFactory", error);
94 }
95 log.debug("Found LogFactory for " + logSystem);
96 }
97 return factory;
98 }
99
100
101 errors.forEach(e -> System.err.println(e.getMessage()));
102 throw new RuntimeException("Could not find factory implementation for log subsystem " + logSystem);
103 }
104 }
105
106
107
108
109
110
111 public static void setLogSystem(final String logSystem)
112 {
113 LogManager.logSystem = logSystem;
114 }
115
116
117
118
119 private static LogFactory getLogFactory()
120 {
121 return LogFactoryHolder.INSTANCE;
122 }
123
124
125
126
127 protected LogManager()
128 {
129 }
130
131
132
133
134 public static void shutdown()
135 {
136 getLogFactory().shutdown();
137 }
138
139
140
141
142
143
144
145
146
147
148
149 public static Log getLog(final Class<?> clazz)
150 {
151 return getLogFactory().getLog(clazz);
152 }
153
154
155
156
157
158
159
160
161
162
163 public static Log getLog(final String name)
164 {
165 return getLogFactory().getLog(name);
166 }
167
168
169
170
171
172
173 public static Log getRootLogger()
174 {
175 return getLog(LogFactory.ROOT_LOGGER_NAME);
176 }
177 }