package monakhv.android.samlib.data; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.android.LogcatAppender; import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.FileAppender; import monakhv.android.samlib.BuildConfig; import monakhv.samlib.log.AbstractLogger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.HashMap; /* * Copyright 2015 Dmitry Monakhov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * 2/13/15. */ public class Logger implements AbstractLogger { private static HashMap<String,org.slf4j.Logger> logger; private SettingsHelper mSettingsHelper; public Logger(SettingsHelper settingsHelper){ mSettingsHelper=settingsHelper; logger = new HashMap<>(); initLogger(); } public final void initLogger() { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); lc.reset(); ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); if (BuildConfig.DEBUG){ // setup LogcatAppender PatternLayoutEncoder logCatEncoder = new PatternLayoutEncoder(); logCatEncoder.setContext(lc); logCatEncoder.setPattern("monk-[%thread] %msg%n"); logCatEncoder.start(); LogcatAppender logcatAppender = new LogcatAppender(); logcatAppender.setContext(lc); logcatAppender.setEncoder(logCatEncoder); logcatAppender.start(); root.addAppender(logcatAppender); } if (mSettingsHelper.getDebugFlag()){ // setup FileAppender File logFile = new File(mSettingsHelper.getDataDirectoryPath(),SettingsHelper.DEBUG_FILE); PatternLayoutEncoder fileEncoder = new PatternLayoutEncoder(); fileEncoder.setContext(lc); fileEncoder.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"); fileEncoder.start(); FileAppender<ILoggingEvent> fileAppender = new FileAppender<>(); fileAppender.setContext(lc); File save = new File(logFile.getAbsolutePath()); fileAppender.setFile(save.getAbsolutePath()); fileAppender.setEncoder(fileEncoder); fileAppender.setPrudent(true); fileAppender.setLazy(false); fileAppender.start(); root.addAppender(fileAppender); } } private org.slf4j.Logger getLogger(String tag){ if (logger.containsKey(tag)){ return logger.get(tag); } else { org.slf4j.Logger log = LoggerFactory.getLogger(tag); logger.put(tag,log); return log; } } @Override public void verbose(String tag, String msg) { getLogger(tag).trace(msg); } @Override public void debug(String tag, String msg) { getLogger(tag).debug(msg); } @Override public void info(String tag, String msg) { getLogger(tag).info(msg); } @Override public void warn(String tag, String msg) { getLogger(tag).warn(msg); } @Override public void error(String tag, String msg) { getLogger(tag).error(msg); } @Override public void verbose(String tag, String msg, Throwable ex) { getLogger(tag).trace(msg,ex); } @Override public void debug(String tag, String msg, Throwable ex) { getLogger(tag).debug(msg,ex); } @Override public void info(String tag, String msg, Throwable ex) { getLogger(tag).info(msg,ex); } @Override public void warn(String tag, String msg, Throwable ex) { getLogger(tag).warn(msg,ex); } @Override public void error(String tag, String msg, Throwable ex) { getLogger(tag).error(msg,ex); } }