1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.waarp.common.logging;
21
22 import ch.qos.logback.classic.Level;
23 import ch.qos.logback.classic.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.slf4j.helpers.NOPLoggerFactory;
26
27 import java.io.OutputStream;
28 import java.io.PrintStream;
29 import java.io.UnsupportedEncodingException;
30
31
32
33
34 public class WaarpSlf4JLoggerFactory extends WaarpLoggerFactory {
35 static final String ROOT = org.slf4j.Logger.ROOT_LOGGER_NAME;
36
37
38
39
40
41
42 public WaarpSlf4JLoggerFactory(final WaarpLogLevel level) {
43 super(level);
44 seLevelSpecific(currentLevel);
45 }
46
47 @Override
48 protected final void seLevelSpecific(final WaarpLogLevel level) {
49 final Logger logger = (Logger) LoggerFactory.getLogger(ROOT);
50 switch (level) {
51 case TRACE:
52 logger.setLevel(Level.TRACE);
53 break;
54 case DEBUG:
55 logger.setLevel(Level.DEBUG);
56 break;
57 case INFO:
58 logger.setLevel(Level.INFO);
59 break;
60 case ERROR:
61 logger.setLevel(Level.ERROR);
62 break;
63 case WARN:
64 logger.setLevel(Level.WARN);
65 break;
66 default:
67 logger.setLevel(Level.OFF);
68 }
69 }
70
71 @Override
72 public final WaarpLogger newInstance(final String name) {
73 final Logger logger = (Logger) LoggerFactory.getLogger(name);
74 return new WaarpSlf4JLogger(logger);
75 }
76
77 WaarpSlf4JLoggerFactory(final boolean failIfNOP) {
78 super(null);
79 assert failIfNOP;
80
81
82
83 final StringBuilder buf = new StringBuilder();
84 final PrintStream err = System.err;
85 try {
86 System.setErr(new PrintStream(new OutputStream() {
87 @Override
88 public final void write(final int b) {
89 buf.append((char) b);
90 }
91 }, true, "US-ASCII"));
92 } catch (final UnsupportedEncodingException e) {
93 throw new Error(e);
94 }
95
96 try {
97 if (LoggerFactory.getILoggerFactory() instanceof NOPLoggerFactory) {
98 throw new NoClassDefFoundError(buf.toString());
99 } else {
100 err.print(buf);
101 err.flush();
102 }
103 } finally {
104 System.setErr(err);
105 seLevelSpecific(currentLevel);
106 }
107 }
108
109 @Override
110 protected final WaarpLogLevel getLevelSpecific() {
111 final Logger logger = (Logger) LoggerFactory.getLogger(ROOT);
112 if (logger.isTraceEnabled()) {
113 return WaarpLogLevel.TRACE;
114 } else if (logger.isDebugEnabled()) {
115 return WaarpLogLevel.DEBUG;
116 } else if (logger.isInfoEnabled()) {
117 return WaarpLogLevel.INFO;
118 } else if (logger.isWarnEnabled()) {
119 return WaarpLogLevel.WARN;
120 } else if (logger.isErrorEnabled()) {
121 return WaarpLogLevel.ERROR;
122 }
123 return WaarpLogLevel.NONE;
124 }
125 }