#android #logger #log #logging #adb #logcat #sockets

android-logd-logger

A logging implementation for log which directly writes to the Android logd daemon

13 releases

0.4.3 Mar 8, 2024
0.4.2 Jul 20, 2023
0.4.1 Apr 14, 2023
0.3.3 Feb 15, 2023
0.1.3 Mar 2, 2021

#128 in Debugging

Download history 95/week @ 2023-12-25 317/week @ 2024-01-01 254/week @ 2024-01-08 308/week @ 2024-01-15 631/week @ 2024-01-22 336/week @ 2024-01-29 253/week @ 2024-02-05 200/week @ 2024-02-12 384/week @ 2024-02-19 450/week @ 2024-02-26 1029/week @ 2024-03-04 480/week @ 2024-03-11 467/week @ 2024-03-18 485/week @ 2024-03-25 1116/week @ 2024-04-01 264/week @ 2024-04-08

2,339 downloads per month
Used in northstar

MIT/Apache

49KB
856 lines

android-logd-logger

Crates.io Build Status Docs

This logger writes logs to the Android logd, a system service with multiple ringbuffers for logs and evens. This is normally done via liblog (a native Android lib). Instead of using liblog, this crate writes directly to the logd socket with the trivial protocol below. This logger is written in pure Rust without any need for ffi.

On non Android system the log output is printed to stdout in the default format of logcat.

Usage

Add this to your Cargo.toml

[dependencies]
android-logd-logger = "0.4.3"

Initialize the logger with a fixed tag and the module path included in the log payload.


fn main() {
    android_logd_logger::builder()
        .parse_filters("debug")
        .tag(TagMode::TargetStrip)
        .prepend_module(true)
        .init();

    trace!("trace message: is not logged");
    debug!("debug message");
    info!("info message");
    warn!("warn message");
    error!("error message");
}

To write android logd "events" use event or event_now, e.g:

android_logd_logger::write_event_now(1, "test").unwrap();

Configuration

Writing to the logd socket is a single point of synchronization for threads. The android-logd-logger can be configured with the tls feature to maintain one socket per thread or use a single socket for the whole process. Use the features tls if you want less interference between threads but pay for one connection per thread.

License

Licensed under either of

Dependencies

~4–13MB
~117K SLoC