1 /*
2 * Copyright 2012 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package com.foxinmy.weixin4j.logging;
17
18
19 import org.slf4j.LoggerFactory;
20 import org.slf4j.helpers.NOPLoggerFactory;
21
22 import java.io.OutputStream;
23 import java.io.PrintStream;
24 import java.io.UnsupportedEncodingException;
25
26 /**
27 * Logger factory which creates a <a href="http://www.slf4j.org/">SLF4J</a>
28 * logger.
29 */
30 public class Slf4JLoggerFactory extends InternalLoggerFactory {
31
32 public Slf4JLoggerFactory() {
33 }
34
35 Slf4JLoggerFactory(boolean failIfNOP) {
36 assert failIfNOP; // Should be always called with true.
37
38 // SFL4J writes it error messages to System.err. Capture them so that the user does not see such a message on
39 // the console during automatic detection.
40 final StringBuffer buf = new StringBuffer();
41 final PrintStream err = System.err;
42 try {
43 System.setErr(new PrintStream(new OutputStream() {
44 @Override
45 public void write(int b) {
46 buf.append((char) b);
47 }
48 }, true, "US-ASCII"));
49 } catch (UnsupportedEncodingException e) {
50 throw new Error(e);
51 }
52
53 try {
54 if (LoggerFactory.getILoggerFactory() instanceof NOPLoggerFactory) {
55 throw new NoClassDefFoundError(buf.toString());
56 } else {
57 err.print(buf);
58 err.flush();
59 }
60 } finally {
61 System.setErr(err);
62 }
63 }
64
65 @Override
66 public InternalLogger newInstance(String name) {
67 return new Slf4JLogger(LoggerFactory.getLogger(name));
68 }
69 }