#android #tracing #logcat #log-messages #logd

tracing-logcat

为跟踪库输出到 Android 的 logcat 的写入器

1 个不稳定版本

0.1.0 2024 年 7 月 7 日

#688调试

Download history 113/week @ 2024-07-06 8/week @ 2024-07-13 3/week @ 2024-07-27

每月 124 次下载

Apache-2.0

13KB
208

tracing-logcat

tracing-logcat 是一个库,它为 tracing 库提供 Android logcat 输出。它直接与 Android 的 logd 进程通信,而不是使用 liblog.so,这使得它适合与静态链接的可执行文件一起使用。

请参阅 examples/ 以了解如何使用此库的示例。

许可证

tracing-logcat 在 Apache 2.0 许可下发布。请参阅 LICENSE 以获取完整的许可文本。


lib.rs:

tracing 写入器,用于将日志记录到 Android 的 logcat。由于在 NDK 中没有作为静态库提供的 liblog,此库直接连接到 logd 并通过 文档协议 发送消息。

与 liblog 相比,有一些行为差异

  • 在非常不可能的情况下,如果 Android 的 logd 崩溃,日志记录将停止工作,因为 tracing-logcat 不会尝试重新连接到 logd 套接字。
  • 仅支持 Android 5 及以上版本。Android 的早期版本没有使用 logd,并且在用户空间守护程序没有实现 logcat。
  • 超过 4068 - <tag length> - 2 字节的消息将被拆分为多个消息,而不是被截断。如果原始消息是有效的 UTF-8,则消息将在代码点边界处拆分(而不是在图形簇边界处拆分)。否则,消息将正好在长度限制处拆分。

示例

使用固定标签

use tracing::Level;
use tracing_logcat::{LogcatMakeWriter, LogcatTag};
use tracing_subscriber::fmt::format::Format;

let tag = LogcatTag::Fixed(env!("CARGO_PKG_NAME").to_owned());
let writer = LogcatMakeWriter::new(tag)
   .expect("Failed to initialize logcat writer");

tracing_subscriber::fmt()
    .event_format(Format::default().with_level(false).without_time())
    .with_writer(writer)
    .with_ansi(false)
    .with_max_level(Level::TRACE)
    .init();

使用跟踪目标作为标签

use tracing::Level;
use tracing_logcat::{LogcatMakeWriter, LogcatTag};
use tracing_subscriber::fmt::format::Format;

let writer = LogcatMakeWriter::new(LogcatTag::Target)
   .expect("Failed to initialize logcat writer");

tracing_subscriber::fmt()
    .event_format(Format::default().with_level(false).with_target(false).without_time())
    .with_writer(writer)
    .with_ansi(false)
    .with_max_level(Level::TRACE)
    .init();

依赖项

~3–11MB
~123K SLoC