成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android|集成 slf4j + logback 作為日志框架

移動(dòng)開(kāi)發(fā) Android
將從零開(kāi)始,記錄如何在 Android APP 中集成 slf4j + logback 作為日志框架,并使用 Lombok 注解生成日志對(duì)象。

最近在做一個(gè) Android APP 的日志改造時(shí),想要滿(mǎn)足如下需求:

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

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

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

集成 slf4j + logback

logback-android 項(xiàng)目地址:https://github.com/tony19/logback-android

1.在項(xiàng)目/模塊的 build.gradle 文件中添加依賴(lài):

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

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

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

<configuration debug="false"
    xmlns="https://tony19.github.io/logback-android/xml"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://tony19.github.io/logback-android/xml https://cdn.jsdelivr.net/gh/tony19/logback-android/logback.xsd"
>

    <property name="LOG_DIR" value="${EXT_DIR:-${DATA_DIR}}/test/log"/>
    
    <appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
        <tagEncoder>
            <pattern>%logger{12}</pattern>
        </tagEncoder>
        <encoder>
            <pattern>[%-20thread] %msg</pattern>
        </encoder>
    </appender>

    <appender name="local_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/test.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/test.%d.log</fileNamePattern>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="logcat" />
    </root>

    <root level="INFO">
        <appender-ref ref="local_file" />
    </root>
</configuration>

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

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

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

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

3.可以開(kāi)始使用 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());

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

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

使用 Lombok 注解生成日志對(duì)象

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

這里我們可以使用 Lombok 注解來(lái)簡(jiǎn)化這一步驟,自動(dòng)生成 logger 對(duì)象。

Lombok 官方提供了 Android 平臺(tái)的集成說(shuō)明:https://projectlombok.org/setup/android。

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

1.安裝 Lombok 插件:

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

注:Android Studio 版本 2020.3.1 - 2022.3.1,JetBrains 官方插件市場(chǎng)無(wú)法搜索到兼容版本的 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 注解來(lái)自動(dòng)生成 logger 對(duì)象了,現(xiàn)在的使用姿勢(shì)簡(jiǎn)化成了這樣:

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

小結(jié)

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

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

責(zé)任編輯:趙寧寧 來(lái)源: 悶騷的程序員
相關(guān)推薦

2013-02-20 09:42:34

JavaLogbackSLF4J

2020-01-07 10:06:26

Slf4jLog4JLogback

2024-03-01 16:52:02

SLF4J日志框架

2023-01-11 21:22:32

Java服務(wù)器

2023-05-06 07:51:22

JavaFacade設(shè)計(jì)模式

2021-03-15 18:47:25

日志開(kāi)發(fā)源碼

2016-10-21 13:10:18

javalog4jslf4j

2024-03-01 08:17:28

SLF4J日志框架

2022-12-30 08:31:27

MDC查詢(xún)?nèi)罩?/a>

2020-10-27 08:24:45

阿里巴巴SLF4J

2020-11-04 12:33:08

Log4j 2日志Logback

2023-10-07 10:08:54

2022-05-12 11:38:26

Java日志Slf4j

2021-08-02 15:40:20

Java日志工具

2025-05-26 08:50:00

SLF4JMDC全鏈路追蹤

2025-01-20 08:10:00

微服務(wù)架構(gòu)SLF4J

2024-01-03 07:19:19

LogbackLog4j2Java

2018-08-28 15:30:54

編程語(yǔ)言Python日志系統(tǒng)

2025-01-14 01:00:00

日志接口Log4j

2021-04-02 07:58:36

LogbackLog4j2日志
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 成人天堂噜噜噜 | 在线观看免费高清av | 夜夜骑首页 | 国产精品亚洲片在线播放 | 97人人干| 久久精品aaa| 蜜月aⅴ国产精品 | 色婷婷一区二区三区四区 | 69xxx免费| 日韩精品免费 | 国产乱码精品一区二区三区五月婷 | 波多野结衣一区二区三区 | 免费观看日韩精品 | 综合久久久久久久 | 国产色播av在线 | 色综合天天天天做夜夜夜夜做 | 亚洲在线 | 国产黄色精品在线观看 | 一区二区三区四区在线视频 | 青青草一区 | 久草免费在线视频 | 国产不卡在线 | 成人免费视屏 | 色婷婷精品国产一区二区三区 | 99久久精品一区二区成人 | 你懂的在线视频播放 | 欧美1区 | 久久高清 | 国产1区2区在线观看 | 久久黄色网 | 久久精品亚洲一区 | 午夜看电影在线观看 | 黄色日本视频 | 国产精品一区久久久久 | av在线播放网 | 日本不卡视频在线播放 | 日韩精品免费播放 | 男女污污动态图 | 精品国产乱码久久久久久1区2区 | 日韩在线一区二区三区 |