001 package com.github.sarxos.webcam.log;
002
003 import java.io.File;
004 import java.io.FileInputStream;
005 import java.io.FileNotFoundException;
006 import java.io.IOException;
007 import java.io.InputStream;
008
009 import org.slf4j.Logger;
010 import org.slf4j.LoggerFactory;
011
012 import ch.qos.logback.classic.LoggerContext;
013 import ch.qos.logback.classic.joran.JoranConfigurator;
014 import ch.qos.logback.core.joran.spi.JoranException;
015
016
017 /**
018 * Configure loggers.
019 *
020 * @author Bartosz Firyn (SarXos)
021 */
022 public class WebcamLogConfigurator {
023
024 /**
025 * Logger instance.
026 */
027 private static final Logger LOG = LoggerFactory.getLogger(WebcamLogConfigurator.class);
028
029 /**
030 * Configure SLF4J.
031 *
032 * @param is input stream to logback configuration xml
033 */
034 public static void configure(InputStream is) {
035
036 try {
037 Class.forName("ch.qos.logback.classic.LoggerContext");
038 } catch (ClassNotFoundException e1) {
039 LOG.error("Cannot configure logger because logback LoggerContext is not available in classpath");
040 return;
041 }
042
043 LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
044 JoranConfigurator configurator = new JoranConfigurator();
045 configurator.setContext(context);
046 context.reset();
047
048 try {
049 configurator.doConfigure(is);
050 } catch (JoranException e) {
051 LOG.error("Joran configuration exception", e);
052 e.printStackTrace();
053 }
054 }
055
056 /**
057 * Configure SLF4J.
058 *
059 * @param file logback configuration file
060 */
061 public static void configure(File file) {
062 FileInputStream fis = null;
063 try {
064 fis = new FileInputStream(file);
065 configure(fis);
066 } catch (FileNotFoundException e) {
067 LOG.error("File not found " + file, e);
068 e.printStackTrace();
069 } finally {
070 if (fis != null) {
071 try {
072 fis.close();
073 } catch (IOException e) {
074 LOG.error("Cannot close file " + file, e);
075 e.printStackTrace();
076 }
077 }
078 }
079 }
080
081 /**
082 * Configure SLF4J.
083 *
084 * @param file logback configuration file path
085 */
086 public static void configure(String file) {
087 configure(new File(file));
088 }
089 }