您的位置:首页 > 手游攻略 > logcat:实践指南

logcat:实践指南

作者:互联网  时间: 2026-09-11 09:50:01  

工作中遇到相关需求时,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 分开 在非常不同的背景下。

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4