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    
013    /**
014     * Configure loggers.
015     * 
016     * @author Bartosz Firyn (SarXos)
017     */
018    public class WebcamLogConfigurator {
019    
020            /**
021             * Logger instance.
022             */
023            private static final Logger LOG = LoggerFactory.getLogger(WebcamLogConfigurator.class);
024    
025            /**
026             * Configure SLF4J.
027             * 
028             * @param is input stream to logback configuration xml
029             */
030            public static void configure(InputStream is) {
031    
032                    ClassLoader cl = Thread.currentThread().getContextClassLoader();
033    
034                    try {
035    
036                            String[] names = {
037                                    "ch.qos.logback.classic.LoggerContext",
038                                    "ch.qos.logback.classic.joran.JoranConfigurator",
039                            };
040                            for (String name : names) {
041                                    Class.forName(name, false, cl);
042                            }
043    
044                            ch.qos.logback.classic.LoggerContext context = (ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory();
045                            ch.qos.logback.classic.joran.JoranConfigurator configurator = new ch.qos.logback.classic.joran.JoranConfigurator();
046                            configurator.setContext(context);
047                            context.reset();
048                            configurator.doConfigure(is);
049    
050                    } catch (ClassNotFoundException e) {
051                            System.err.println("WLogC: Logback JARs are missing in classpath");
052                    } catch (NoClassDefFoundError e) {
053                            System.err.println("WLogC: Logback JARs are missing in classpath");
054                    } catch (Throwable e) {
055                            e.printStackTrace();
056                    }
057            }
058    
059            /**
060             * Configure SLF4J.
061             * 
062             * @param file logback configuration file
063             */
064            public static void configure(File file) {
065                    FileInputStream fis = null;
066                    try {
067                            fis = new FileInputStream(file);
068                            configure(fis);
069                    } catch (FileNotFoundException e) {
070                            LOG.error("File not found " + file, e);
071                            e.printStackTrace();
072                    } finally {
073                            if (fis != null) {
074                                    try {
075                                            fis.close();
076                                    } catch (IOException e) {
077                                            LOG.error("Cannot close file " + file, e);
078                                            e.printStackTrace();
079                                    }
080                            }
081                    }
082            }
083    
084            /**
085             * Configure SLF4J.
086             * 
087             * @param file logback configuration file path
088             */
089            public static void configure(String file) {
090                    configure(new File(file));
091            }
092    }