2016-11-03 4 views
0

ファイルにのみログオンし、コンソールログを無効にしたいが、これは動作しない。私は次のことがうまくいくはずだと思いますが、そうはしません。誰が私のミスをどこに知っていますか?私はdetachAndStopAllAppendersで任意のデフォルトのロガーを削除するには、まだ、それはコンソールへのロギングを停止しないしようとしているslf4j/logback - コンソールログを無効にする

...

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の依存関係

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' 
} 

私はmLogger.debug(logMessage);以降のログ記録...

+0

'slf4j'と' logback-android' 。 – tony19

+0

が完了しました。 – prom85

+0

'logback-android'にはデフォルトでロガーがありません。そのため、あなたのアプリケーション(または環境)内の何かがコンソールアペンダーを有効にしています。 'assets /'に 'logback.xml'がありますか? 'logback-android'を使ってあなたの依存関係の1つですか? – tony19

答えて

0

問題は、別のロガーを別のライブラリとlog4jはグローバルに設定されているので、私の小さなログクラスは他のどこかに登録された1つのロガーにログを記録していました...

関連する問題