Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Android|集成 slf4j + logback 作为日志框架

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

作者头像
mzlogin
发布于 2023-10-27 09:23:35
发布于 2023-10-27 09:23:35
1.2K00
代码可运行
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员
运行总次数:0
代码可运行

最近在做一个 Android APP 的日志改造时,想要满足如下需求:

  1. 能够很方便地使用可变参数的方式输出日志;
  2. 日志能够根据级别输出到控制台和文件;
  3. 能够按照日期和文件大小进行日志文件的切割,滚动保存指定天数的日志,自动清理旧日志。

基于这个需求,我搜了一下「Android 日志框架」,大多网友推荐的是 logger、timber、xLog 等等,看着也不错。不过出于几年后端开发的经验和习惯,我进一步了解,发现熟悉的 log4j 和 logback 在 Android 上也有人做过适配,所以最终决定使用 slf4j + logback,以在前后端开发中取得一致的体验。

做过 Java 后端开发的同学,对于 slf4j + logback 的组合一般不陌生,而 Android 开发的同学则可能不一定听过它们。所以,本文将从零开始,记录如何在 Android APP 中集成 slf4j + logback 作为日志框架,并使用 Lombok 注解生成日志对象。

集成 slf4j + logback

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

一、在项目/模块的 build.gradle 文件中添加依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 才可被其它模块引用。

二、创建日志配置文件 app/src/main/assets/logback.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 及以上级别的日志输出到控制台,INFO 及以上级别的日志输出到文件,文件按照日期切割,最多保留 15 天的日志。

大家可以按需配置,比如还可以限定单个文件大小、自定义日志输出的格式等等。

在项目的 Wiki 里提到有一点是 Android 开发者比较关注的,就是日志有保存路径,既可以指定绝对路径,也可以用变量,比如:

  • ${DATA_DIR} 表示 Context.getFilesDir()
  • ${EXT_DIR} 表示 Context.getExternalFilesDir(null)
  • {DATA_DIR}} 表示当 EXT_DIR 可用时使用 EXT_DIR,否则使用 DATA_DIR;
  • ${PACKAGE_NAME} 表示包名;
  • ${VERSION_NAME} 表示版本名;
  • ${VERSION_CODE} 表示版本号。

三、可以开始使用 slf4j 的 API 进行日志打印了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 和对应位置的文件。

当对配置有疑问,需要调试时,可以将上面配置文件里的 debug="false" 改为 debug="true",这样 logback 就会输出详细的信息,方便我们定位问题。

使用 Lombok 注解生成日志对象

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

这里我们可以使用 Lombok 注解来简化这一步骤,自动生成 logger 对象。

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

基于 Android Studio 环境,要做的其实就两步。

一、安装 Lombok 插件;

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

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

二、在需要使用的模块的 build.gradle 文件里添加如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies {
	compileOnly 'org.projectlombok:lombok:1.18.30'
	annotationProcessor 'org.projectlombok:lombok:1.18.30'
}

然后,就可以使用 @Slf4j 注解来自动生成 logger 对象了,现在的使用姿势简化成了这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Slf4j
public class Test {
    public void test() {
        log.info("hello world");
    }
}

小结

好了以上就是在 Android 里集成 slf4j + logback 的记录了,至此我「统一」了 Java 后端和 Android 客户端打印日志的用法,在避免多项目维护造成「精神分裂」的路上前进了一小步。

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

以上步骤供有类似需求的同学参考,同时强烈建议以官方文档为主。如果有更好的方案,欢迎留言讨论交流。

相关链接

文档信息

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/10/26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AI Agent,为什么是AIGC最后的杀手锏?
AI Agent无疑是当下大模型最激动人心的发展主线,被称为“大模型下一场战事”“最后的杀手产品”“开启新工业革命时代的Agent-centric”。11月7日,OpenAI首届开发者大会(OpenAI DevDay)引爆了AI Agent。OpenAI发布了AI Agent初期形态产品GPTs,并推出了相应的制作工具GPT Builder。用户仅仅通过跟GPT Builder聊天,把想要的GPT功能描述一遍,就能生成专属GPT。专属GPT可以在日常生活、特定任务、工作或家庭中更为适用。为此,OpenAI还开放了大量的新API(包括视觉、图像DALL·E3、语音),以及新推出的Assistants API,让开发者可以更便捷地开发自己专属的GPT。比尔·盖茨最新发表一篇文章明确提出,5年内AI Agent将大行其道,每个用户都将拥有一个专属AI Agent。用户不需要再因为不同的功能需求而使用不同的APP,他只需用日常语言告诉他的Agent想做什么就可以。[1]
小腾资讯君
2023/11/29
2.3K0
AI Agent,为什么是AIGC最后的杀手锏?
AI日报 - 2025年4月10日
▎🤖 AGI突破 | 谷歌或研发Transformer继任者,整合长期记忆;OpenAI组建战略部署团队加速AGI落地;GPT-4再引AGI界限讨论。
訾博ZiBo
2025/04/09
1870
AI日报 - 2025年4月10日
LLM Agent 简介
GPT(尤其是GPT-4)等大语言模型(LLM)的推出,让人类认识到了大语言模型强大的文本生成能力。 只是用来做文本生成工具的话,LLM的能力就被严重低估了。Agents的想法的出现,则进一步激发了开发者的想象力。 AI Agents被认为是OpenAI的下一个发力方向,也是通用人工智能(AGI)时代的开始。
windealli
2024/01/12
5.5K0
LLM Agent 简介
LLM就是框架,Agent就是应用,Workflow就是架构
很多人都在思考,LLM-based时代的应用应该怎么去开发。然而,时代的惯性会束缚我们的思维,就像iphone颠覆式出现一样,在它成为市场主流之前,我们根本想不出在手机屏幕上的软件会如此不同。这让我想到那句著名的论断,汽车出现之前,人们对交通工具的究极想象都是围绕马展开,给马带上昂贵的装备,给马车装上牛逼的助推器,而当汽车出现时,人们才恍然大悟,原来交通工具可以不需要马。AI时代的到来,新的iphone时刻,是否会改变人们使用信息技术的方式?人机的交互方式,还会永远和当下一样吗?计算机上的各种功能,将会以怎样的方式在我们的工作和生活中提供能力?本文将详细聊一聊这个话题。
否子戈
2024/04/12
6780
LLM就是框架,Agent就是应用,Workflow就是架构
超干货!如何设计基于Agent的AI应用系统
由复旦NLP和米哈游调查完成的文献综述《The Rise and Potential of Large Language Model Based Agents: A Survey》详细阐述了LLM-based Agent的相关理论、实践模型和深度思考,知乎上有大神做了详细的解读,我下面基于此再做白话版总结。
否子戈
2024/03/26
1.9K0
超干货!如何设计基于Agent的AI应用系统
[算法前沿]--061-生成式 AI 的发展方向,是 Chat 还是 Agent?
AI Agent是一种超越简单文本生成的人工智能系统。它使用大型语言模型(LLM)作为其核心计算引擎,使其能够进行对话、执行任务、推理并展现一定程度的自主性。简而言之,Agent是一个具有复杂推理能力、记忆和执行任务手段的系统。
AI拉呱
2024/02/09
7200
[算法前沿]--061-生成式 AI 的发展方向,是 Chat 还是 Agent?
近期爆火的 AI Agent,运行原理全解析
“Android、iOS 和 Windows 都是平台,AI Agent 将成为下一个平台”,比尔·盖茨在他的博客文章中这样说到。
架构精进之路
2025/02/03
6150
近期爆火的 AI Agent,运行原理全解析
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
有很多人或许会疑惑,Agent 这个东西看起来跟 LLM 也没差得那么远,那为啥最近突然 Agent 那么火,而不称之为 LLM-Application 或者其他的词呢?这就得从 Agent 的来历上说起了,因为 Agent 是个很古老的术语,甚至可以追溯至亚里士多德和休谟等人的言论。从哲学意义上讲,“代理人”是指具有行动能力的实体,而 “代理” 一词则表示这种能力的行使或体现。而从狭义上讲,“代理”通常是指有意行动的表现; 相应地,“代理人” 一词表示拥有欲望、信念、意图和行动能力的实体。需要注意的是,代理人不仅包括人类个体,还包括物理世界和虚拟世界中的其他实体。重要的是,“代理” 的概念涉及个人的自主性,赋予他们行使意志、做出选择和采取行动的能力,而不是被动地对外部刺激做出反应。
汀丶人工智能
2024/07/05
2.5K0
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
【愚公系列】《AI Agent技术、应用与商业》006-Al Agent的架构和组成
在人工智能的快速发展中,智能代理(AI Agent)成为了推动各行各业智能化转型的重要力量。无论是在智能客服、智能推荐,还是在自动化决策系统中,智能代理都扮演着至关重要的角色。然而,很多人对智能代理的内部架构和组成部分仍然感到陌生。它们是如何工作的?又由哪些关键组件构成?
愚公搬代码
2025/03/15
1950
斯坦福多模态交互 Agent 综述:Agent AI 集成及其技术挑战
斯坦福大学李飞飞、微软研究院首席研究员等联合撰写的论文,这篇 Agent AI 综述一共80页。
AIGC新知
2025/02/07
4750
斯坦福多模态交互 Agent 综述:Agent AI 集成及其技术挑战
AI Agents 技术栈
随着生成式人工智能(如 ChatGPT)的快速发展,AI Agents(人工智能体)正从概念走向大规模应用。2025 年被广泛视为“AI Agent 元年”,其技术栈的成熟标志着智能系统从“被动响应”向“自主决策”的跃迁。那么什么是 AI Agents 呢?构成 AI Agents 的技术栈有哪些关键组成部分?本文参考了一些资料,尝试解释这一概念,主要参考了以下内容:
云水木石
2025/02/12
3840
AI Agents 技术栈
深入浅出智能工作流(Agentic Workflow)|技术干货
著名 AI 学者、斯坦福大学教授吴恩达提出了 AI Agent 的四种设计方式后,Agentic Workflow(智能体工作流)立即火爆全球,多个行业都在实践智能体工作流的应用,并推动了新的 Agentic AI 探索热潮。
Botnow
2024/09/18
8700
深入浅出智能工作流(Agentic Workflow)|技术干货
LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理
LLM 技术图谱(LLM Tech Map)是将 LLM 相关技术进行系统化和图形化的呈现,此图谱主要特点是“专注于技术人视角”,不求从 LLM 产业角度汇聚信息,而是希望让从事相关工作或是想了解 LLM 的技术人有一个快速感知。
汀丶人工智能
2024/06/25
8660
LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理
o3 deep research: LLM 驱动的 Agent 综述
大型语言模型(LLM)的崛起在过去几年引发了人工智能领域的飞跃式发展。尤其是 2022 年底 OpenAI 推出的 ChatGPT,短短两个月内月活用户就突破一亿,成为史上用户增长最快的消费者应用 (ChatGPT sets record for fastest-growing user base - analyst note | Reuters)。ChatGPT 所展现的强大自然语言对话和内容生成能力,如一场“核爆”引发全球对于通用人工智能的极大关注,各行各业开始思考如何将这类大模型应用到实际业务中。紧随其后,OpenAI 发布了更先进的 GPT-4 模型,能够理解更复杂的指令,并支持图像等多模态输入。这场由 ChatGPT 引领的LLM浪潮,不仅催生了大量类似产品和开源模型,也让“ AI 更自主地完成复杂任务”成为下一个技术探索热点。在这种背景下,由 LLM 驱动的 Agent(智能代理)概念逐渐兴起,成为 AI 技术爱好者和产业从业者共同关注的前沿方向。
立委
2025/03/08
2050
AI Agent深度调研:设计一个QQ机器人
随着大模型的兴起,AI Agent被认为是大模型最重要的落地方向之一,无论是在学术界还是在工业界,对AI Agent的各种研究和实践一直热度很高。本文主要从 AI Agent的研究背景、学术界对AI Agent的探索、工业界对AI Agent的探索、基于AI Agent的QQ机器人设计构思这几个角度展开,聊聊AI Agent的一些调研结果。我们先来看下AI Agent的发展历史。
腾讯技术工程官方号
2024/08/08
6190
AI Agent深度调研:设计一个QQ机器人
【愚公系列】《AI Agent技术、应用与商业》002-Al Agent的发展历程
在科技迅猛发展的今天,人工智能(AI)已成为推动各行各业变革的重要力量。其中,智能代理(AI Agent)作为AI技术的一个重要分支,正逐渐走入我们的生活并改变我们的工作方式。那么,智能代理的发展历程究竟是怎样的呢?
愚公搬代码
2025/03/11
2080
【愚公系列】《AI Agent技术、应用与商业》001-AI Agent的概念、特征与定义
在当今科技迅猛发展的时代,人工智能(AI)已经渗透到我们日常生活的方方面面。从智能家居到自动驾驶汽车,AI技术的应用无处不在。而在这一广泛的应用背后,有一个关键的概念——AI Agent,它为这些智能系统的高效运作提供了基础支持。那么,究竟什么是AI Agent?它具备哪些独特的特征?又该如何准确定义这一概念呢?在本文中,我们将深入探讨AI Agent的基本概念、核心特征以及其在实际应用中的重要性。希望通过这篇文章,能够帮助您更好地理解和把握这一前沿科技领域的关键要素。
愚公搬代码
2025/03/10
1760
Agent:数字代理的崛起与未来
在ChatGPT引发的人工智能热潮中,我们亲眼见证了AI应用形态的戏剧性演变。回想2022年底,当人们首次体验ChatGPT时,那种震撼感仍历历在目——一个能够理解复杂问题并提供流畅回答的聊天机器人(chatbot),彻底改变了我们对机器智能的期望。这种应用形态——我们姑且称之为"对话式AI"——本质上是大语言模型(LLM)应用的初级表现形式,一种简单的信息交换机制。
立委
2025/03/08
1700
复旦NLP团队发布80页大模型Agent综述,一文纵览AI智能体的现状与未来
近期,复旦大学自然语言处理团队(FudanNLP)推出 LLM-based Agents 综述论文,全文长达 86 页,共有 600 余篇参考文献!作者们从 AI Agent 的历史出发,全面梳理了基于大型语言模型的智能代理现状,包括:LLM-based Agent 的背景、构成、应用场景、以及备受关注的代理社会。同时,作者们探讨了 Agent 相关的前瞻开放问题,对于相关领域的未来发展趋势具有重要价值。
机器之心
2023/09/19
11.9K0
复旦NLP团队发布80页大模型Agent综述,一文纵览AI智能体的现状与未来
智能体(AI Agent)的技术演进与生态重构
曾几何时,你还在幻想是否有这样一个万能助手?它能瞬间整理会议纪要、自动规划旅行路线,甚至在你生病时可以实现中医诊疗中的“问”—这不是科幻电影,而是正在发生的现实。
六月的雨在Tencent
2025/04/01
2780
推荐阅读
相关推荐
AI Agent,为什么是AIGC最后的杀手锏?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档