日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android|集成slf4j+logback作為日志框架

最近在做一個 Android APP 的日志改造時,想要滿足如下需求:

創(chuàng)新互聯(lián)建站始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10多年累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)整合營銷推廣解決方案,現(xiàn)已廣泛運用于各行各業(yè)的客戶,其中包括:成都水電改造等企業(yè),備受客戶稱揚。

  • 能夠很方便地使用可變參數(shù)的方式輸出日志;
  • 日志能夠根據(jù)級別輸出到控制臺和文件;
  • 能夠按照日期和文件大小進(jìn)行日志文件的切割,滾動保存指定天數(shù)的日志,自動清理舊日志。

基于這個需求,我搜了一下「Android 日志框架」,大多網(wǎng)友推薦的是 logger、timber、xLog 等等,看著也不錯。不過出于幾年后端開發(fā)的經(jīng)驗和習(xí)慣,我進(jìn)一步了解,發(fā)現(xiàn)熟悉的 log4j 和 logback 在 Android 上也有人做過適配,所以最終決定使用 slf4j + logback,以在前后端開發(fā)中取得一致的體驗。

做過 Java 后端開發(fā)的同學(xué),對于 slf4j + logback 的組合一般不陌生,而 Android 開發(fā)的同學(xué)則可能不一定聽過它們。所以,本文將從零開始,記錄如何在 Android APP 中集成 slf4j + logback 作為日志框架,并使用 Lombok 注解生成日志對象。

集成 slf4j + logback

logback-android 項目地址:https://github.com/tony19/logback-android

1.在項目/模塊的 build.gradle 文件中添加依賴:

dependencies {
  implementation 'org.slf4j:slf4j-api:2.0.7'
  implementation 'com.github.tony19:logback-android:3.0.0'
}

如果是單模塊項目,可以直接在 app/build.gradle 文件中添加,如果是多模塊項目,可以在一個公共模塊的 build.gradle 文件中添加,記得將 slf4j-api 的 implementation 改為 api 才可被其它模塊引用。

2.創(chuàng)建日志配置文件 app/src/main/assets/logback.xml:



    
    
    
        
            %logger{12}
        
        
            [%-20thread] %msg
        
    

    
        ${LOG_DIR}/test.log
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
        
        
            ${LOG_DIR}/test.%d.log
            15
        
    

    
        
    

    
        
    

以上配置表示 DEBUG 及以上級別的日志輸出到控制臺,INFO 及以上級別的日志輸出到文件,文件按照日期切割,最多保留 15 天的日志。

大家可以按需配置,比如還可以限定單個文件大小、自定義日志輸出的格式等等。

在項目的 Wiki 里提到有一點是 Android 開發(fā)者比較關(guān)注的,就是日志有保存路徑,既可以指定絕對路徑,也可以用變量,比如:

  • ${DATA_DIR} 表示 Context.getFilesDir();
  • ${EXT_DIR} 表示 Context.getExternalFilesDir(null);
  • ${EXT_DIR:-${DATA_DIR}} 表示當(dāng) EXT_DIR 可用時使用 EXT_DIR,否則使用 DATA_DIR;
  • ${PACKAGE_NAME} 表示包名;
  • ${VERSION_NAME} 表示版本名;
  • ${VERSION_CODE} 表示版本號。

3.可以開始使用 slf4j 的 API 進(jìn)行日志打印了:

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

// 聲明 logger
Logger log = LoggerFactory.getLogger(MainActivity.class);

// 打印日志
log.info("hello world");
log.info("number {}, boolean {}, string {}, object {}", 1, true, "string", new Object());

運行 APP,可以看到日志輸出到 logcat 和對應(yīng)位置的文件。

當(dāng)對配置有疑問,需要調(diào)試時,可以將上面配置文件里的 debug="false" 改為 debug="true",這樣 logback 就會輸出詳細(xì)的信息,方便我們定位問題。

使用 Lombok 注解生成日志對象

在上一部分的第 3 步,在每一個需要使用 logger 的類里,都需要手動去聲明 logger,如 Logger log = LoggerFactory.getLogger(MainActivity.class);,不算方便。

這里我們可以使用 Lombok 注解來簡化這一步驟,自動生成 logger 對象。

Lombok 官方提供了 Android 平臺的集成說明:https://projectlombok.org/setup/android。

基于 Android Studio 環(huán)境,要做的其實就兩步。

1.安裝 Lombok 插件:

Settings -> Plugins -> 搜索 Lombok -> 安裝

注:Android Studio 版本 2020.3.1 - 2022.3.1,JetBrains 官方插件市場無法搜索到兼容版本的 Lombok 插件,可以參考 https://gitee.com/sgpublic/lombok-plugin-repository 解決。

2.在需要使用的模塊的 build.gradle 文件里添加如下內(nèi)容:

dependencies {
	compileOnly 'org.projectlombok:lombok:1.18.30'
	annotationProcessor 'org.projectlombok:lombok:1.18.30'
}

然后,就可以使用 @Slf4j 注解來自動生成 logger 對象了,現(xiàn)在的使用姿勢簡化成了這樣:

@Slf4j
public class Test {
    public void test() {
        log.info("hello world");
    }
}

小結(jié)

好了以上就是在 Android 里集成 slf4j + logback 的記錄了,至此我「統(tǒng)一」了 Java 后端和 Android 客戶端打印日志的用法,在避免多項目維護造成「精神分裂」的路上前進(jìn)了一小步。

本文所列代碼示例已上傳至 GitHub,地址:https://github.com/mzlogin/AndroidPractices/tree/master/android-studio/LogbackDemo


分享題目:Android|集成slf4j+logback作為日志框架
文章鏈接:http://www.dlmjj.cn/article/dphcjii.html