1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package ch.qos.logback.classic.spi;
16
17 import org.slf4j.ILoggerFactory;
18 import org.slf4j.IMarkerFactory;
19 import org.slf4j.helpers.BasicMarkerFactory;
20 import org.slf4j.helpers.Util;
21 import org.slf4j.spi.MDCAdapter;
22 import org.slf4j.spi.SLF4JServiceProvider;
23
24 import ch.qos.logback.classic.LoggerContext;
25 import ch.qos.logback.classic.util.ContextInitializer;
26 import ch.qos.logback.classic.util.LogbackMDCAdapter;
27 import ch.qos.logback.core.CoreConstants;
28 import ch.qos.logback.core.joran.spi.JoranException;
29 import ch.qos.logback.core.status.StatusUtil;
30 import ch.qos.logback.core.util.StatusPrinter;
31
32 public class LogbackServiceProvider implements SLF4JServiceProvider {
33
34 final static String NULL_CS_URL = CoreConstants.CODES_URL + "#null_CS";
35
36
37
38
39
40
41 public static String REQUESTED_API_VERSION = "2.0.99";
42
43 private LoggerContext defaultLoggerContext = new LoggerContext();
44
45
46
47 private IMarkerFactory markerFactory = new BasicMarkerFactory();
48
49
50
51 private LogbackMDCAdapter mdcAdapter = new LogbackMDCAdapter();
52
53 @Override
54 public void initialize() {
55 defaultLoggerContext.setName(CoreConstants.DEFAULT_CONTEXT_NAME);
56
57 defaultLoggerContext.setMDCAdapter(mdcAdapter);
58 initializeLoggerContext();
59 defaultLoggerContext.start();
60 }
61
62 private void initializeLoggerContext() {
63 try {
64 try {
65 new ContextInitializer(defaultLoggerContext).autoConfig();
66 } catch (JoranException je) {
67 Util.report("Failed to auto configure default logger context", je);
68 }
69
70 if (!StatusUtil.contextHasStatusListener(defaultLoggerContext)) {
71 StatusPrinter.printInCaseOfErrorsOrWarnings(defaultLoggerContext);
72 }
73
74
75 } catch (Exception t) {
76 Util.report("Failed to instantiate [" + LoggerContext.class.getName() + "]", t);
77 }
78 }
79
80 @Override
81
82 public ILoggerFactory getLoggerFactory() {
83 return defaultLoggerContext;
84 }
85
86 @Override
87 public IMarkerFactory getMarkerFactory() {
88 return markerFactory;
89 }
90
91 @Override
92 public MDCAdapter getMDCAdapter() {
93 return mdcAdapter;
94 }
95
96 @Override
97 public String getRequestedApiVersion() {
98 return REQUESTED_API_VERSION;
99 }
100
101 }