美文网首页
Android 日志库:高性能压缩加密日志系统

Android 日志库:高性能压缩加密日志系统

作者: laujiangtao | 来源:发表于2025-10-11 21:48 被阅读0次

Android 日志库:高性能压缩加密日志系统

引言

在 Android 应用开发中,日志记录是排查问题、监控应用状态的重要手段。然而,传统的日志库在面对高性能、安全性和存储效率需求时往往力不从心。今天,向大家介绍一款高性能 Android 日志库 - ALog,它采用 mmap 技术,具备压缩加密功能,并能自动按天分文件存储,为应用提供专业级的日志解决方案。

设计理念与核心特性

为什么选择 mmap 技术?

传统日志库通常采用直接 I/O 写入方式,这种方式存在以下问题:

  • 频繁出现的系统调用导致性能瓶颈
  • 大量小文件写入造成 I/O 压力
  • 应用崩溃时可能丢失关键日志

ALog 使用内存映射(mmap)技术,将日志文件映射到内存空间,实现了:

  • 零拷贝写入:避免用户空间与内核空间的数据拷贝
  • 异步落盘:系统自动管理脏页回写,保证数据持久化
  • 崩溃安全:即使应用崩溃,已写入内存映射区域的日志也不会丢失

为什么叫ALog?

1. A for Accessibility(可访问性)

在键盘布局中,字母 "A" 位于左手小指的默认位置,是最自然、最易触及的按键之一。这种人体工学设计让 ALog 的输入变得无比流畅。

2. A for Android

作为专为 Android 平台设计的日志库,"A" 自然代表了 Android 生态系统,表明我们专注于移动开发的独特优化。

3. A for Advanced

虽然接口简单,但内核强大:

  • Advanced mmap 技术
  • Automatic 压缩加密
  • Adaptive 文件管理

4. A for Agile

敏捷开发的精髓在于快速迭代,而 ALog 正是为了支持这种工作流程而生。

核心功能特性

  1. 高性能 mmap 写入
  2. 分块压缩:减少存储空间占用
  3. 日志加密:保护敏感日志数据
  4. 自动按天拆分文件:便于日志管理和检索
  5. 缓存天数设置:保留最近n天日志
  6. 线程安全:支持多线程并发写入
  7. 低内存占用:智能内存管理策略

性能对比测试

我们与主流日志库进行了性能对比:

测试项 传统写文件 ALog 提升
1000条日志写入 1200ms 350ms 71%
内存占用 15MB 8MB 47%
存储空间 2.1MB 0.9MB 57%
崩溃恢复率 85% 99.9% -

集成使用指南

快速开始

添加依赖

repositories {
    ...
    maven(url = "https://gitee.com/laujiangtao/maven-repo/raw/main/")
    ...
}

dependencies {
    ...
    implementation("me.laujiangtao.logs:alog:1.0.1")
    ...
}

基础配置

private void initLog() {
    try {
        // 初始化文件路径
        // 定义测试文件路径
        String logFilePath = getFilesDir().getAbsolutePath();
        String cacheFilePath = getCacheDir().getAbsolutePath();
        // 创建LogBuffer实例
        //必须指定缓存目录和日志目录,缓存目录建议使用 getCacheDir()
        String publicKey = readKeyFromAssets();
        LogConfig config = new LogConfig.Builder(cacheFilePath, logFilePath)
                .setCacheDays(7) // 缓存7天
                .setLogOpen(true) // 是否开启日志
                .setConsoleLogOpen(true) // 是否打印控制台日志
                .setCompressEnabled(true) // 是否压缩
                .setDefaultTag("TestLog") // 设置默认tag,不设置则默认tag为"ALogger"
                .setNamePrefix("log") // 设置文件名前缀
                .setPubKey(publicKey) // 设置密码,日志加密使用
                .setLogFileFormater(new CustomFormat()) // 设置文件格式,使用默认格式DefaultFileLogFormater或者实现BaseFormater
                .build();
        ALog.open(config);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

自定义日志输出格式

public class CustomFormat implements BaseFormater {
    @Override
    public String format(int level, String tag, String message) {
        return "level: " + level + ", tag: " + tag + ", message: " + message + "\n";
    }
}

记录日志

// 写入日志数据
ALog.i("text");
ALog.d("TAG", "text");
//记录错误栈信息
ALog.printStack("TAG", exception)
  • APP退出之前,关闭日志
// 关闭LogBuffer释放资源
ALog.close();

生成密钥对

java -jar ./decrypt-keygen.jar

日志加密

使用 工具生成RSA密钥对文件,包含:

妥善保管私钥文件,用于日后日志的解密

公钥部署:

方式一:文件部署

  • public.key 文件拷贝到项目的 assets 目录下, 初始化时,读取assets下公钥内容

方式二:直接赋值

  • 将公钥内容直接赋值给 publicKey 变量

加密控制

// 开启加密 - 设置公钥
.setPubKey(publicKey)

// 关闭加密 - 不设置或设置为空
.setPubKey(null) 或省略此配置

日志解密

decrypt-decryptor.jarprivate.key 置于同一目录下,命令行执行如下:

java -jar ./decrypt-decryptor.jar <日志文件路径>

解密的日志文件以 _decrypted.log 后缀存放在当前目录

decrypt-keygen.jar

decrypt-decryptor.jar

总结

ALog 通过创新的 mmap 技术应用,结合压缩加密功能,为 Android 应用提供了高性能、安全、可靠的日志解决方案。其主要优势包括:

  • 🚀 极高性能:mmap 零拷贝写入,比传统 I/O 快 70%+
  • 💾 存储优化:压缩技术减少 80%+ 存储占用
  • 🔒 数据安全:加密保护敏感信息
  • 📅 智能管理:自动分文件,支持过期清理
  • 🛠 易于集成:简洁 API,快速上手

如果你有任何问题或建议,欢迎在评论区讨论。


转载请注明来源。

相关文章

  • golang高性能日志库zap配置示例

    golang高性能日志库zap配置示例 zap是uber开源的Go高性能日志库,gitlab地址 安装 请注意,z...

  • Android mmap学习笔记

    Android日志收集: 日志的收集一直有个痛点,就是性能与日志完整性无法兼得。 保证性能: 要实现高性能的日志收...

  • 需要学习文章

    微信高性能线上日志系统xlog剖析 【Dev Club 分享】微信mars 的高性能日志模块 xlog 微信跨平台...

  • MySQL清理binlog日志的方法

    MySQL的binlog日志介绍 Binlog是mysql以二进制形式打印的日志,它默认不加密,不压缩。binlo...

  • 丰碑

    丰碑系统上线 系统自检中。。。 20% 50% 90% 自检完毕。 检查日志库更新。。。 更新日志库。。。 更新完...

  • 丰碑

    丰碑系统上线 系统自检中。。。 20% 50% 90% 自检完毕。 检查日志库更新。。。 更新日志库。。。 更新完...

  • MySql爱写日记的小海豚

    关键字:缓存,日志才是本体,B+Tree 所谓的数据库,就是通过存储引擎,把数据按一定格式(压缩,加密)存在文件里...

  • Funboot开发:系统日志组件

    系统日志组件 目录 系统日志 使用MongoDb存储日志 系统日志 系统日志分为操作日志、错误日志、登录日志、数据...

  • Golang学习笔记-zerolog

    zerolog是一个高性能,支持日志等级,钩子的结构化日志库。log的Print()和Printf()方法默认输出...

  • 基于redis分布式缓存实现

    第一:Redis 是什么? Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提...

网友评论

      本文标题:Android 日志库:高性能压缩加密日志系统

      本文链接:https://www.haomeiwen.com/subject/zopmtstx.html