2016-11-03 3 views
0

Ich möchte nur in eine Datei protokollieren und die Protokollierung der Konsole deaktivieren, aber dies funktioniert nicht. Ich denke, das sollte funktionieren, aber das tut es nicht. Weiß jemand wo ich meinen Fehler mache?slf4j/logback - Konsolenprotokollierung deaktivieren

Ich versuche, jede Standard-Logger mit detachAndStopAllAppenders zu entfernen, aber immer noch, es stoppt nicht an der Konsole anmelden ...

import android.util.Log; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

import ch.qos.logback.classic.LoggerContext; 
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 FileLogger 
{ 
    static Logger mLogger = LoggerFactory.getLogger(FileLogger.class); 

    public FileLogger(FileLoggingSetup setup) 
    { 
     if (setup == null) 
      throw new RuntimeException("You can't create a FileLogger without providing a setup!"); 

     init(setup); 
    } 

    private void init(FileLoggingSetup setup) 
    { 
     LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); 
     lc.reset(); 

     // 1) FileLoggingSetup - Encoder for File 
     PatternLayoutEncoder encoder1 = new PatternLayoutEncoder(); 
     encoder1.setContext(lc); 
     encoder1.setPattern(setup.mLogPattern); 
     encoder1.start(); 

     // 2) FileLoggingSetup - rolling file appender 
     RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<ILoggingEvent>(); 
     rollingFileAppender.setAppend(true); 
     rollingFileAppender.setContext(lc); 
     //rollingFileAppender.setFile(setup.mFolder + "/" + setup.mFileName + "." + setup.mFileExtension); 

     // 3) FileLoggingSetup - Rolling policy (one log per day) 
     TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<ILoggingEvent>(); 
     rollingPolicy.setFileNamePattern(setup.mFolder + "/" + setup.mFileName + "_%d{yyyyMMdd}." + setup.mFileExtension); 
     rollingPolicy.setMaxHistory(setup.mDaysToKeep); 
     rollingPolicy.setCleanHistoryOnStart(true); 
     rollingPolicy.setParent(rollingFileAppender); 
     rollingPolicy.setContext(lc); 
     rollingPolicy.start(); 

     rollingFileAppender.setTriggeringPolicy(rollingPolicy); 
     rollingFileAppender.setEncoder(encoder1); 
     rollingFileAppender.start(); 

     // add the newly created appenders to the root logger; 
     // qualify Logger to disambiguate from org.slf4j.Logger 
     ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) mLogger; 
     root.detachAndStopAllAppenders(); 
     root.addAppender(rollingFileAppender); 
    } 
} 

gradle Abhängigkeiten

compile 'org.slf4j:slf4j-api:1.7.21' 
compile 'com.github.tony19:logback-android-core:1.1.1-6' 
compile ('com.github.tony19:logback-android-classic:1.1.1-6') { 
    exclude group: 'com.google.android', module: 'android' 
} 

Ich bin Protokollierung über mLogger.debug(logMessage); und ähnliche danach ...

+0

Bitte aktualisieren Sie Ihre Frage, um Ihre grdle Abhängigkeiten für 'slf4j' und' Logback-android' zu zeigen . – tony19

+0

erledigt. Meine Importe und meine Abhängigkeiten hinzugefügt – prom85

+0

'logback-android' hat standardmäßig keine Logger, so dass etwas in Ihrer App (oder Umgebung) den Konsolenappender aktiviert. Haben Sie eine 'logback.xml' in' assets/'? Ist eine Ihrer Abhängigkeiten 'logback-android'? – tony19

Antwort

0

Problem war, dass ich einen anderen Logger in einem anderen registrierte Bibliothek und log4j ist global eingerichtet und so meine kleine Log-Klasse loggte sich auf der einen Logger, die woanders gut registriert wurde ...

Verwandte Themen