logcat:实践指南
工作中遇到相关需求时,logcat值得先读说明,因为它主要用于我CAN HAZ LOGZ。团队若要把它用于日常自动化,应先处理输入边界、依赖和失败处理如果不清楚就很难稳定复用,否则试用结果很容易失真。试跑可以从用一项范围明确的真实任务完成最小试跑开始,并把配置时间、输出质量、异常信息和维护痕迹写进验收记录。我的判断是,它更适合愿意先做小范围验证并复查原始文档的团队;若眼下没有这类需求,先保留观察即可。
方形日志猫
logcat { "I CAN HAZ LOGZ?" }
一个小型的 Kotlin API,用于在 Android 的普通 Log 类之上进行廉价日志记录。
目录
- 设置
- 用途
- 动机
- 许可证
这个梦幻般的徽标是由 @rjrjr. 为您带来的
设置
将 logcat 依赖项添加到库或应用程序的 build.gradle 文件中:
dependencies {
implementation 'com.squareup.logcat:logcat:0.4'
}
在Application.onCreate()中安装AndroidLogcatLogger:
import android.app.Application
import logcat.AndroidLogcatLogger
import logcat.LogPriority.VERBOSE
class ExampleApplication : Application() {
override fun onCreate() {
super.onCreate()
// Log all priorities in debug builds, no-op in release builds.
AndroidLogcatLogger.installOnDebuggableApp(this, minPriority = VERBOSE)
}
}
用途
logcat() 函数有 3 个参数:可选优先级、可选标记和必需的
产生 lambda 的字符串。仅当安装了记录器并且记录器认为
可记录的优先级。
优先级默认为LogPriority.DEBUG。
该标签默认为日志调用站点的类名,无需任何额外的运行时成本。这有效
因为 logcat() 是 Any 的内联扩展函数,并且可以从中访问 this
它可以提取类名。如果从没有 this 的独立功能进行日志记录,请使用
logcat 重载需要标签参数。
logcat() 函数不采用 Throwable 参数。相反,图书馆提供
可抛出的扩展函数:Throwable.asLog(),它返回可记录的字符串。
import logcat.LogPriority.INFO
import logcat.asLog
import logcat.logcat
class MouseController {
fun play() {
val state = "CHEEZBURGER"
logcat { "I CAN HAZ $state?" }
// logcat output: D/MouseController: I CAN HAZ CHEEZBURGER?
logcat(INFO) { "DID U ASK 4 MOAR INFO?" }
// logcat output: I/MouseController: DID U ASK 4 MOAR INFO?
logcat { exception.asLog() }
// logcat output: D/MouseController: java.lang.RuntimeException: FYLEZ KERUPTED
// at sample.MouseController.play(MouseController.kt:22)
// ...
logcat("Lolcat") { "OH HI" }
// logcat output: D/Lolcat: OH HI
}
}
动机
我们建造这个小型图书馆是为了满足广场的特定需求
销售点 应用程序。我们用过
木材 之前就很喜欢它的简单性
API 及其 DebugTree 自动确定其所属类别的能力
调用并使用该类名作为其标签。这是我们将其替换为的动机
广场销售点logcat():
- Kotlin 对字符串插值的支持非常好。我们喜欢用它来记录日志!
不幸的是,如果无论如何禁用日志记录,这可能会代价高昂并且浪费良好的 CPU 。通过使用
生成 lambda 的内联字符串,
logcat()支持字符串插值,无需任何 禁用日志记录时的性能成本。 - Timber 的
DebugTree通过创建堆栈跟踪来捕获调用类名作为标记,这可以 很贵。通过将logcat()作为Any的扩展函数,我们可以调用this::class.java并获取调用上下文而不创建堆栈跟踪。 - 当前的实现使用最外层的最简单的类名作为标记,i.e。字符串
在最后一个
.和第一个$之间。这可能并不总是您想要的。另外,当 从抽象类记录,标签将是运行时子类的名称。我们发现 到目前为止,这些限制对我们来说完全没问题。 - 大多数时候,我们的开发人员只是想“向 logcat 发送一些东西”,甚至不假思索
关于优先级。
logcat()选择“调试”作为正确的默认值,以提供更多的一致性 一个庞大的代码库。将优先级设置为参数也意味着只能学习一种方法,并且您 在编写日志之前不必学习/考虑优先级。这变得尤其 当有多个参数需要重载时很重要(e.g。在 Timber 中(6 个优先级 + 1 通用日志方法)* 3 个重载 = 21 个可供选择的方法)。 - 缺少可抛出参数也是故意的。它只会造成更多的超载和混乱
(e.g。“参数顺序是什么?”),当真正的日志与字符串有关时,您所需要的只是一个简单的
将 throwable 转换为可记录字符串的方法。因此
Throwable.asLog()。 logcat()这个名字是故意无聊的,并且与Android命令行工具完全相同。这个 使其易于记忆,并且开发人员确切地知道它的作用,i.e。登录到本地设备。 人们可以设置一个自定义记录器,在发布版本中远程发送日志,但是我们不这样做 建议这样做:根据我们的经验,远程日志的代码应与本地日志不同,并且 明确如此标识,因为数量和性能影响应该非常明显。- 当这些操作发生时,用于安装记录器的 API 与要记录的 API 分开 在非常不同的背景下。
-
09.11
segment-anything-video:实践指南
-
09.11
tui-realm:实践指南
-
09.11
carp:实践指南
-
09.11
Coldfire:实践指南
-
09.11
Swell:实践指南
-
09.11
logcat:实践指南
-
- simplefs:实践指南
- 09.11
-
- Swell:实践指南
- 09.11
-
- carp:实践指南
- 09.11
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏