Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> програмная настройка логера slf4j 
:(
    Опции темы
tavla
Дата 27.7.2016, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



добрый день.

использую логгер 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) - нет.
подскажите, где я накосячил.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.