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                    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
037                    JoranConfigurator configurator = new JoranConfigurator();
038                    configurator.setContext(context);
039                    context.reset();
040    
041                    try {
042                            configurator.doConfigure(is);
043                    } catch (JoranException e) {
044                            LOG.error("Joran configuration exception", e);
045                            e.printStackTrace();
046                    }
047            }
048    
049            /**
050             * Configure SLF4J.
051             * 
052             * @param file logback configuration file
053             */
054            public static void configure(File file) {
055                    FileInputStream fis = null;
056                    try {
057                            fis = new FileInputStream(file);
058                            configure(fis);
059                    } catch (FileNotFoundException e) {
060                            LOG.error("File not found " + file, e);
061                            e.printStackTrace();
062                    } finally {
063                            if (fis != null) {
064                                    try {
065                                            fis.close();
066                                    } catch (IOException e) {
067                                            LOG.error("Cannot close file " + file, e);
068                                            e.printStackTrace();
069                                    }
070                            }
071                    }
072            }
073    
074            /**
075             * Configure SLF4J.
076             * 
077             * @param file logback configuration file path
078             */
079            public static void configure(String file) {
080                    configure(new File(file));
081            }
082    }