Bug: 159321223

Clone this repo:
  1. d4f200f Upgrade android_logger to 0.13.3 am: 7cf0228c70 by Jeff Vander Stoep · 8 weeks ago main main-16k master
  2. 7cf0228 Upgrade android_logger to 0.13.3 by Jeff Vander Stoep · 3 months ago
  3. 04dd98e Provide with_log_buffer() function am: 8328bd87a6 by Jeff Vander Stoep · 3 months ago
  4. 8328bd8 Provide with_log_buffer() function by Jeff Vander Stoep · 3 months ago
  5. 7214ce8 Migrate to cargo_embargo. am: 5dca274d04 am: e7acaad6c7 am: 7de39f02f5 by Andrew Walbran · 6 months ago

Send Rust logs to Logcat

Version CI status

This library is a drop-in replacement for env_logger. Instead, it outputs messages to android's logcat.

This only works on Android and requires linking to log which is only available under android. With Cargo, it is possible to conditionally require this library:

[target.'cfg(target_os = "android")'.dependencies]
android_logger = "0.13"

Example of initialization on activity creation, with log configuration:

#[macro_use] extern crate log;
extern crate android_logger;

use log::LevelFilter;
use android_logger::{Config,FilterBuilder};

fn native_activity_create() {
            .with_max_level(LevelFilter::Trace) // limit log level
            .with_tag("mytag") // logs will show under mytag tag
            .with_filter( // configure messages for specific crate

    trace!("this is a verbose {}", "message");
    error!("this is printed by default");

To allow all logs, use the default configuration with min level Trace:

#[macro_use] extern crate log;
extern crate android_logger;

use log::LevelFilter;
use android_logger::Config;

fn native_activity_create() {

There is a caveat that this library can only be initialized once (hence the init_once function name). However, Android native activity can be re-created every time the screen is rotated, resulting in multiple initialization calls. Therefore this library will only log a warning for subsequent init_once calls.

This library ensures that logged messages do not overflow Android log message limits by efficiently splitting messages into chunks.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.