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

為什么使用 slf4j + logback

logbak定位于log4j的替代者,logback同樣支持slf4j,方便被替換。在Android平臺(tái)上氮昧,我在使用log4中遇到tag混亂的問題。相比log4j浦楣,logback-android的jar更小巧袖肥。

下載jar包

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

導(dǎo)入到工程中

將上面的兩個(gè)jar文件放入項(xiàng)目中的libs中振劳,并添加項(xiàng)目引用椎组。

配置日志文件的位置

注意下面代碼中的 configureLogbackDirectly 方法,它接收一個(gè)文件路徑參數(shù),指示存放日志文件的目錄历恐,還有一個(gè)是生成的日志文件的前綴寸癌。我下面配置了“每天生成一個(gè)新的日志文件”。

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);
    }


}

使用方法

先聲明和創(chuàng)建實(shí)例

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 輸出");

代碼混淆注意

請(qǐng)?jiān)谀愕幕煜O(shè)置里加入下面這些:

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

示例代碼下載地址

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

參考資料:

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弱贼,一起剝皮案震驚了整個(gè)濱河市灵份,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哮洽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弦聂,死亡現(xiàn)場(chǎng)離奇詭異鸟辅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)莺葫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門匪凉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捺檬,你說我怎么就攤上這事再层。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵聂受,是天一觀的道長(zhǎng)蒿秦。 經(jīng)常有香客問我,道長(zhǎng)蛋济,這世上最難降的妖魔是什么棍鳖? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮碗旅,結(jié)果婚禮上渡处,老公的妹妹穿的比我還像新娘。我一直安慰自己祟辟,他們只是感情好医瘫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旧困,像睡著了一般醇份。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叮喳,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天被芳,我揣著相機(jī)與錄音,去河邊找鬼馍悟。 笑死畔濒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锣咒。 我是一名探鬼主播侵状,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毅整!你這毒婦竟也來了趣兄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悼嫉,失蹤者是張志新(化名)和其女友劉穎艇潭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戏蔑,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹋凝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了总棵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳍寂。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖情龄,靈堂內(nèi)的尸體忽然破棺而出迄汛,到底是詐尸還是另有隱情捍壤,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布鞍爱,位于F島的核電站鹃觉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏硬霍。R本人自食惡果不足惜帜慢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唯卖。 院中可真熱鬧粱玲,春花似錦、人聲如沸拜轨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)橄碾。三九已至卵沉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間法牲,已是汗流浹背史汗。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒垃,地道東北人停撞。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悼瓮,于是被迫代替她去往敵國(guó)和親戈毒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容