android-logd-logger 0.5.0

A logging implementation for `log` which directly writes to the Android logd daemon
Documentation
# `android-logd-logger`

[![Crates.io][crates-badge]][crates-url]
[![Build Status][actions-badge]][actions-url]
[![Docs][docs-badge]][docs-url]

[docs-badge]: https://docs.rs/android-logd-logger/badge.svg
[docs-url]: https://docs.rs/android-logd-logger
[crates-badge]: https://img.shields.io/crates/v/android-logd-logger.svg
[crates-url]: https://crates.io/crates/android-logd-logger
[actions-badge]: https://github.com/flxo/android-logd-logger/workflows/CI/badge.svg
[actions-url]: https://github.com/flxo/android-logd-logger/actions?query=workflow%3ACI+branch%3Amaster

This logger writes logs to the Android `logd`, a system service with
multiple ring buffers for logs and events. This is normally done
via `liblog` (a native Android library). Instead of using `liblog`, this crate
writes directly to the `logd` socket with a simple protocol.
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

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

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

```rust
use log::{debug, error, info, trace, warn};

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

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

## Runtime Configuration

The logger can be reconfigured at runtime using the returned `Logger` handle:

```rust
use log::LevelFilter;

fn main() {
    let logger = android_logd_logger::builder()
        .tag("MyApp")
        .init();

    // Change settings at runtime
    logger.tag("NewTag");
    logger.filter_level(LevelFilter::Warn);
}
```

To write Android logd "events" use `write_event_now`, e.g:

```rust
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

* Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>)
* MIT license ([LICENSE-MIT]LICENSE-MIT or <http://opensource.org/licenses/MIT>)