добрый день. использую логгер slf4j, при конфигурации посредством xml все работает отлично | Код | <configuration> <property name="LOG_DIR" value="/sdcard/Results/.logs" />
<appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender" > <tagEncoder> <pattern>akrit</pattern> </tagEncoder> <encoder> <pattern>[%class{0}][%thread] %msg%n</pattern> </encoder> </appender>
<!-- --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/log.txt</file>
<append>true</append> <encoder> <pattern>%date{ISO8601} [%thread] %-5level %logger{0} %msg%n</pattern> </encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/log.%d.txt</fileNamePattern> <maxHistory>14</maxHistory> </rollingPolicy> </appender>
<root level="DEBUG" > <appender-ref ref="LOGCAT" /> <appender-ref ref="FILE" /> </root>
</configuration> |
но когда создаю то же самое программно, ничего нет ни в логкэте, ни в файле лога: | Код | package projects.common.logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; 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.rolling.RollingFileAppender; import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
public class LogBack { private static boolean debugMode = true; private static String logPath = null;
public static Logger getLogger(Class<?> _clazz) { //return getLoggerXML(_clazz); return configureLogbackDirectly(_clazz, debugMode, logPath); }
public static Logger getLoggerXML(Class<?> _clazz) { return (Logger) LoggerFactory.getLogger(_clazz); }
public static void setDebugMode(boolean _debugMode) { debugMode = _debugMode; }
public static void setLogPath(String _logPath) { logPath = _logPath; }
private static Logger configureLogbackDirectly(Class<?> _clazz, boolean _debug, String _logPath) { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); context.reset();
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); root.setLevel(Level.ERROR); if (_debug) root.setLevel(Level.DEBUG); root.addAppender(logCat(context)); if (_logPath != null) root.addAppender(logFile(context, _logPath));
return (Logger) LoggerFactory.getLogger(_clazz); }
private static RollingFileAppender<ILoggingEvent> logFile(LoggerContext _context, String _filePath) { RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<ILoggingEvent>(); rollingFileAppender.setAppend(true); rollingFileAppender.setContext(_context);
rollingFileAppender.setFile(_filePath + "/log.txt");
TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<ILoggingEvent>(); rollingPolicy.setFileNamePattern(_filePath + "/log.%d.txt"); rollingPolicy.setMaxHistory(7); rollingPolicy.setParent(rollingFileAppender); rollingPolicy.setContext(_context); rollingPolicy.start();
rollingFileAppender.setRollingPolicy(rollingPolicy);
PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setPattern("%date{ISO8601} [%thread] %-5level %logger{0} %msg%n"); encoder.setContext(_context); encoder.start();
rollingFileAppender.setEncoder(encoder); rollingFileAppender.setName("rollingFileAppender"); rollingFileAppender.start();
return rollingFileAppender; }
private static LogcatAppender logCat(LoggerContext _context) { PatternLayoutEncoder encoder = new PatternLayoutEncoder(); encoder.setContext(_context); encoder.setPattern("[%thread] %msg%n"); encoder.start();
PatternLayoutEncoder tag_encoder = new PatternLayoutEncoder(); tag_encoder.setContext(_context); tag_encoder.setPattern("%class{0}"); tag_encoder.start();
LogcatAppender logcatAppender = new LogcatAppender(); logcatAppender.setContext(_context); logcatAppender.setEncoder(encoder); logcatAppender.setTagEncoder(tag_encoder); logcatAppender.setName("logcatAppender"); logcatAppender.start();
return logcatAppender; } } |
т.е. если в getLogger(Class<?> _clazz) сделать активным метод getLoggerXML(_clazz), то все работает, configureLogbackDirectly(_clazz, debugMode, logPath) - нет. подскажите, где я накосячил.
|