当前位置: 首页 > news >正文

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier:Kotlin Multiplatform的日志记录库

在现代软件开发中,日志记录是不可或缺的部分,它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言,能够在多个平台上统一日志记录的方法显得尤为重要。Napier就是这样一个专为Kotlin Multiplatform设计的日志库,它支持Android、iOS、macOS、watchOS、tvOS、JVM和JavaScript平台。在本文中,我们将深入探讨Napier的功能和使用方法。

Napier简介

Napier是一个多平台日志记录库,旨在为Kotlin Multiplatform项目提供一致的日志记录体验。它允许开发者在通用模块中编写日志代码,并在各个平台上显示相应的日志。

支持的平台

Napier支持以下平台:

  • Android
  • iOS、macOS、watchOS、tvOS(支持Intel和Apple Silicon)
  • JVM
  • JavaScript

日志格式

Napier根据平台的不同,采用了不同的日志格式:

  • Android:使用android.util.Log(Logcat),格式为[Class name]$[Method name]: [Your log]

  • iOS/macOS/watchOS/tvOS:使用print,格式为[Date time][Symbol][Log level][Class name].[Method name] - [Your log],如果是从挂起函数调用,还会在末尾添加[async]标签。

  • JavaScript:使用console.log

  • JVM:使用java.util.logging.Logger

示例代码

以下是一个通用模块中的示例代码,展示了如何使用Napier记录不同级别的日志:

class Sample {fun hello(): String {Napier.v("Hello Napier")Napier.d("optional tag", tag = "your tag")return "Hello Napier"}suspend fun suspendHello(): String {Napier.i("Hello")delay(3000L)Napier.w("Napier!")return "Suspend Hello Napier"}fun handleError() {try {throw Exception("throw error")} catch (e: Exception) {Napier.e("Napier Error", e)}}
}

安装与配置

MavenCentral和jCenter

Napier可以从MavenCentral或jCenter仓库下载。以下是如何在build.gradle文件中添加依赖项:

repositories {mavenCentral()
}def napierVersion = "[latest version]"
sourceSets {commonMain {dependencies {implementation "io.github.aakira:napier:$napierVersion"}}
}

对于Kotlin DSL:

repositories {mavenCentral()
}val napierVersion = "[latest version]"
sourceSets {val commonMain by getting {dependencies {implementation("io.github.aakira:napier:$napierVersion")}}
}

使用方法

在通用模块中记录日志

Napier提供了多种日志记录方法,可以在通用模块中使用:

// 详细日志
Napier.v("Hello Napier")
Napier.v { "Hello Napier" }// 设置标签
Napier.d("optional tag", tag = "your tag")
Napier.d(tag = "your tag") { "optional tag" }try {// ...
} catch (e: Exception) {// 设置异常Napier.e("Napier Error", e)Napier.e(e) { "Napier Error" }
}// 顶级函数记录日志
log { "top-level" }
log(tag = "your tag") { "top-level" }

初始化

在使用Napier之前,需要在各个平台上初始化它。

Android

在Android中,使用DebugAntilog进行初始化:

Napier.base(DebugAntilog())
iOS

在iOS中,编写初始化代码,并在iOS项目中调用:

fun debugBuild() {Napier.base(DebugAntilog())
}// 在iOS项目中调用
NapierProxyKt.debugBuild()

日志级别

Napier支持多种日志级别:

  • VERBOSE: Napier.v()
  • DEBUG: Napier.d()
  • INFO: Napier.i()
  • WARNING: Napier.w()
  • ERROR: Napier.e()
  • ASSERT: Napier.wtf()

高级功能

自定义Antilog

Napier允许开发者注入自定义的Antilog,以便在调试和发布版本中切换不同的日志记录策略。例如,使用Firebase Crashlytics记录日志:

Android
if (BuildConfig.DEBUG) {FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)Napier.base(DebugAntilog())
} else {FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)Napier.base(CrashlyticsAntilog(this))
}
iOS
#if DEBUG
NapierProxyKt.debugBuild()
#else
FirebaseApp.configure()
NapierProxyKt.releaseBuild(antilog: CrashlyticsAntilog(crashlyticsAddLog: { priority, tag, message inCrashlytics.crashlytics().log("\(String(describing: tag)): \(String(describing: message))")},crashlyticsSendLog: { throwable inCrashlytics.crashlytics().record(error: throwable)}
))
#endif

结语

Napier作为一个Kotlin Multiplatform日志记录库,为开发者提供了一致且强大的日志记录功能。无论是调试信息还是错误日志,Napier都能帮助你在多个平台上高效记录和管理日志。如果你正在寻找一个多平台支持、易于使用的日志记录库,Napier无疑是一个不错的选择。

项目地址

https://github.com/AAkira/Napier

相关文章:

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier:Kotlin Multiplatform的日志记录库 在现代软件开发中,日志记录是不可或缺的部分,它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言,能够在多个平台上统一日志记录的方法显得尤为重要。Napier…...

MySQL基础——SQL语句

目录 1.SQL通用语法 2.SQL分类 3 DDL 3.1数据库操作 3.1.1查询 3.1.2创建 3.1.3删除 3.1.4使用 3.2表操作 3.2.1查询 3.2.2创建 3.2.3数据类型 3.2.4表修改(alter打头) 3.2.5表删除(drop/truncate打头) 3.3 DDL总结…...

比特币通用API服务

Bitcoin 通用API服务 exlectrs: API后台服务(Rust语言编写) https://github.com/Blockstream/electrs.git 使用electr作为后台的区块链浏览器:https://github.com/Blockstream/esplora.git https://github.com/Blockstream/electrs https://github.com/romanz/electrs/blo…...

Spock mock私有方法

mock私有方法 ‍ 被测试的方法是MiddleGroundAppListBO​类下的getPromptIdKeyAppPromptInfoMap方法 private Map<Long, AppPromptInfoModel> getPromptIdKeyAppPromptInfoMap(String cubeAppIdentity) {List<AppPromptInfoDO> promptByApp knowledgeCubeQueryR…...

网络协议四

一、云中网络 物理机的劣势&#xff1a; 1&#xff09;一旦需要扩容 CPU、内存、硬盘&#xff0c;都需要去机房手动弄&#xff0c;非常麻烦 2&#xff09;采购的机器往往动不动几百 G 的内存&#xff0c;而每个应用往往可能只需要 4 核 8G 3&#xff09;一台机器&#xff0c;…...

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文&#xff0c;关键点是安装JDK和Hadoop的配置&#xff0c;为避免引用文章变收费&#xff0c;我把关键信息摘录如下&#xff1a; jdk安装和配置就不说了(我本机安装了1.8/15/17/21&#xff0c;以17为主&#xff09;&#xff0c;hadoop安装过程…...

openGauss 6.0.0 一主二备集群安装及使用zcbus实现Oracle到openGauss的数据同步

一、前言 openGauss 6.0.0-RC1是openGauss 2024年3月发布的创新版本&#xff0c;该版本生命周期为0.5年。根据openGauss官网介绍&#xff0c;6.0.0-RC1与之前的版本特性功能保持兼容,另外&#xff0c;在和之前版本兼容的基础上增加了很多新功能&#xff0c;比如分区表性能优化…...

0118__C语言——float.h文件

C语言——float.h文件_c float.h-CSDN博客...

settings和toolchains.xml 区别用法配置

在 IntelliJ IDEA 中配置 Maven 项目时&#xff0c;settings.xml 和 toolchains.xml 的使用场景有所不同。以下是具体的使用情景和配置方法&#xff1a; 1. 使用 settings.xml 使用场景 全局或用户级别的配置&#xff1a;包括设置本地仓库位置、远程仓库、代理服务器、认证信…...

leetcode打卡#day43 携带研究材料(第六期模拟笔试)、416. 分割等和子集

携带研究材料&#xff08;第六期模拟笔试&#xff09; #include<iostream> #include<algorithm> #include<vector>using namespace std;int getMaxValue(vector<int>& weights, vector<int>& values, int n, int m) {vector<vector&…...

MPLS的配置

1、IP可达--- 使用路由协议全网可达 2、配置 MPLS ——LDP [r2]mpls lsr-id 2.2.2.2 必须先定义 mpls 的router-id&#xff0c;要为本地设备的真实ip地址&#xff0c;且邻居可达&#xff0c;因为该地址将用于建立 TCP 会话&#xff0c;建议使用环回地址 [r2]mpls 再开…...

【机器学习】机器学习与教育科技在个性化教学中的融合应用与性能优化新探索

文章目录 引言机器学习与教育科技的基本概念机器学习概述监督学习无监督学习强化学习 教育科技概述学生学习行为分析个性化学习路径推荐智能化教育评估 机器学习与教育科技的融合应用实时学习数据分析数据预处理特征工程 学生成绩预测与优化模型训练模型评估 个性化学习路径推荐…...

C++:十大排序

目录 时间复杂度分析 选择排序 引言 算法思想 动图展示 代码实现 (升序) 优化 代码实现 分析 冒泡排序 引言 算法思想 动图展示 代码实现 插入排序 引言 算法思想 动图展示 代码实现 计数排序 引言 算法思想 动图展示 代码实现 桶排序 引言 算法思…...

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)

Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六) MongoDB 未授权访问漏洞简介以及危害 MongoDB是一款非常受欢迎的开源NoSQL数据库&#xff0c;广泛应用于各种Web应用和移动应用中。然而&#xff0c;由于默认配置的不当或者管理员的疏忽&#xff0c;导致不少Mon…...

【论文速读,找找启发点】2024/6/16

ICME 2023 End-To-End Part-Level Action Parsing With Transformer 类似 DETR&#xff0c;通过 加 query的方式实现 端到端 ELAN: Enhancing Temporal Action Detection with Location Awareness 如何实现位置感知&#xff1f; > 重叠的卷积核&#xff1f; Do we really …...

canal监控mysql变化

目录 概述实践代码总结表创建插入一行数据更新一行数据删除一笔数据 概述 本文测试 canal 监控 mysql 表变化。canal 1.1.7 mysql 8.0.x 版本。 实践 代码 public static void main(String[] args) {// 创建一个 CanalConnector 连接器// username:字符串类型,Canal使用该用…...

MySQLWorkbench导出sql文件

MySQLWorkbench导出sql文件 前言效果图导出操作选择要导出的数据库遇到的问题解决问题 查看mysql路径 前言 在完成数据库搭建之后&#xff0c;需要为上线做准备&#xff0c;那么就需要导出数据库的建库sql了 本篇文章讲解的是mysql Workbench 导出数据建库脚本 效果图 导出操…...

不一样的SYSTEM APP(SYSTEM flag和system_prop区别)

1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…...

C++ 和 JAVA 位运算符

C 和 JAVA 位运算符...

项目进度和成本管理

1.如何正确标识出软件项目活动&#xff1f; 正确标识软件项目活动是项目管理中的一个重要步骤&#xff0c;它有助于确保项目的顺利进行和成功完成。以下是一些标识软件项目活动的步骤和建议&#xff1a; 项目范围定义&#xff1a;首先明确项目的目标和范围&#xff0c;这将帮助…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...