在android中使用logback-android日誌框架配置 slf4j + logback

爲何使用 slf4j + logback

  logbak定位於log4j的替代者,logback一樣支持slf4j,方便被替換。在Android平臺上,我在使用log4中遇到tag混亂的問題。相比log4j,logback-android的jar更小巧。html

下載jar包

  前往 https://github.com/tony19/logback-android ,下載得到 logback-android-1.1.1-4.jar  slf4j-api-1.7.6.jarjava

導入到工程中

  將上面的兩個jar文件放入項目中的libs中,並添加項目引用。android

配置日誌文件的位置

  注意下面代碼中的  configureLogbackDirectly 方法,它接收一個文件路徑參數,指示存放日誌文件的目錄,還有一個是生成的日誌文件的前綴。我下面配置了「天天生成一個新的日誌文件」。git

  

 
 
package vir56k.logdemo;

import android.os.Environment;
import org.slf4j.LoggerFactory;
import java.io.File;
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;

/**
* Created by zhangyunfei on 15/9/21.
*/
public class LogConfigurator {
public static void confifure() {
final String LOG_DIR = Environment.getExternalStorageDirectory() + File.separator + "logback";
final String PREFIX = "log";
configureLogbackDirectly(LOG_DIR, PREFIX);
}

private static void configureLogbackDirectly(String log_dir, String filePrefix) {
// reset the default context (which may already have been initialized)
// since we want to reconfigure it
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
context.reset();


RollingFileAppender<ILoggingEvent> rollingFileAppender = new RollingFileAppender<ILoggingEvent>();
rollingFileAppender.setAppend(true);
rollingFileAppender.setContext(context);

// OPTIONAL: Set an active log file (separate from the rollover files).
// If rollingPolicy.fileNamePattern already set, you don't need this.
//rollingFileAppender.setFile(LOG_DIR + "/log.txt");

TimeBasedRollingPolicy<ILoggingEvent> rollingPolicy = new TimeBasedRollingPolicy<ILoggingEvent>();
rollingPolicy.setFileNamePattern(log_dir + "/" + filePrefix + "_%d{yyyyMMdd}.txt");
rollingPolicy.setMaxHistory(7);
rollingPolicy.setParent(rollingFileAppender); // parent and context required!
rollingPolicy.setContext(context);
rollingPolicy.start();

rollingFileAppender.setRollingPolicy(rollingPolicy);

PatternLayoutEncoder encoder = new PatternLayoutEncoder();
encoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n");
encoder.setContext(context);
encoder.start();

rollingFileAppender.setEncoder(encoder);
rollingFileAppender.start();

LogcatAppender logcatAppender = new LogcatAppender();
logcatAppender.setContext(context);
logcatAppender.setEncoder(encoder);
logcatAppender.setName("logcat1");
logcatAppender.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) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.TRACE);
root.addAppender(rollingFileAppender);
root.addAppender(logcatAppender);

// print any status messages (warnings, etc) encountered in logback config
//StatusPrinter.print(context);
}


}
 

 

使用方法

  先聲明和建立實例

  private static final Logger logger = LoggerFactory.getLogger(MainActivity.class); 
  
  寫入日誌  
  logger.debug("debug Some log message. Details: {}", "debug 輸出");
  logger.info("info Some log message. Details: {}", "debug 輸出");
  logger.error("error Some log message. Details: {}", "debug 輸出");

代碼混淆注意

  請在你的混淆設置里加入下面這些:github

  -keep class ch.qos.** { *; }
  -keep class org.slf4j.** { *; }
  -keepattributes *Annotation*

我寫的示例下載地址

  https://github.com/vir56k/demo/tree/master/logBackDemoapi

參考資料:

https://github.com/tony19/logback-androidapp

https://github.com/tony19/logback-android/wiki/Appender-Notesui

http://logback.qos.ch/documentation.htmlthis

http://blog.csdn.net/zgmzyr/article/details/8267072spa

相關文章
相關標籤/搜索