1
14 package org.slf4j.impl;
15
16 import ch.qos.logback.core.status.StatusUtil;
17 import org.slf4j.ILoggerFactory;
18 import org.slf4j.LoggerFactory;
19 import org.slf4j.helpers.Util;
20 import org.slf4j.spi.LoggerFactoryBinder;
21
22 import ch.qos.logback.classic.LoggerContext;
23 import ch.qos.logback.classic.util.ContextInitializer;
24 import ch.qos.logback.classic.util.ContextSelectorStaticBinder;
25 import ch.qos.logback.core.CoreConstants;
26 import ch.qos.logback.core.joran.spi.JoranException;
27 import ch.qos.logback.core.util.StatusPrinter;
28
29
36 public class StaticLoggerBinder implements LoggerFactoryBinder {
37
38
42
43 public static String REQUESTED_API_VERSION = "1.7.16";
44
45 final static String NULL_CS_URL = CoreConstants.CODES_URL + "#null_CS";
46
47
50 private static StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
51
52 private static Object KEY = new Object();
53
54 static {
55 SINGLETON.init();
56 }
57
58 private boolean initialized = false;
59 private LoggerContext defaultLoggerContext = new LoggerContext();
60 private final ContextSelectorStaticBinder contextSelectorBinder = ContextSelectorStaticBinder.getSingleton();
61
62 private StaticLoggerBinder() {
63 defaultLoggerContext.setName(CoreConstants.DEFAULT_CONTEXT_NAME);
64 }
65
66 public static StaticLoggerBinder getSingleton() {
67 return SINGLETON;
68 }
69
70
73 static void reset() {
74 SINGLETON = new StaticLoggerBinder();
75 SINGLETON.init();
76 }
77
78
81 void init() {
82 try {
83 try {
84 new ContextInitializer(defaultLoggerContext).autoConfig();
85 } catch (JoranException je) {
86 Util.report("Failed to auto configure default logger context", je);
87 }
88
89 if (!StatusUtil.contextHasStatusListener(defaultLoggerContext)) {
90 StatusPrinter.printInCaseOfErrorsOrWarnings(defaultLoggerContext);
91 }
92 contextSelectorBinder.init(defaultLoggerContext, KEY);
93 initialized = true;
94 } catch (Exception t) {
95 Util.report("Failed to instantiate [" + LoggerContext.class.getName() + "]", t);
96 }
97 }
98
99 public ILoggerFactory getLoggerFactory() {
100 if (!initialized) {
101 return defaultLoggerContext;
102 }
103
104 if (contextSelectorBinder.getContextSelector() == null) {
105 throw new IllegalStateException("contextSelector cannot be null. See also " + NULL_CS_URL);
106 }
107 return contextSelectorBinder.getContextSelector().getLoggerContext();
108 }
109
110 public String getLoggerFactoryClassStr() {
111 return contextSelectorBinder.getClass().getName();
112 }
113
114 }
115