#log-file #log #events #tail #fs #watch #logging

linemux

A library providing asynchronous, multiplexed tailing for (namely log) files

9 releases

0.3.0 Dec 17, 2022
0.2.4 Aug 15, 2022
0.2.3 Aug 1, 2021
0.2.2 Jun 6, 2021
0.1.1 Apr 17, 2020

#399 in Asynchronous

Download history 604/week @ 2023-12-18 438/week @ 2023-12-25 624/week @ 2024-01-01 1170/week @ 2024-01-08 670/week @ 2024-01-15 649/week @ 2024-01-22 577/week @ 2024-01-29 713/week @ 2024-02-05 904/week @ 2024-02-12 699/week @ 2024-02-19 1094/week @ 2024-02-26 1352/week @ 2024-03-04 938/week @ 2024-03-11 1351/week @ 2024-03-18 834/week @ 2024-03-25 1056/week @ 2024-04-01

4,218 downloads per month
Used in 6 crates

MIT/Apache

60KB
1K SLoC

linemux

Build Status Crate API Coverage

A library providing asynchronous, multiplexed tailing for (namely log) files.

Also available is the underlying file event-stream (driven by notify) that can register non-existent files.

Usage

Add linemux to your Cargo.toml with:

[dependencies]
linemux = "0.3"

Example

use linemux::MuxedLines;

#[tokio::main]
async fn main() -> std::io::Result<()> {
    let mut lines = MuxedLines::new()?;

    // Register some files to be tailed, whether they currently exist or not.
    lines.add_file("some/file.log").await?;
    lines.add_file("/some/other/file.log").await?;

    // Wait for `Line` event, which contains the line captured for a given
    // source path.
    while let Ok(Some(line)) = lines.next_line().await {
        println!("source: {}, line: {}", line.source().display(), line.line());
    }
    Ok(())
}

Caveats

Currently, linemux assumes that if a nonexistent file is added, its parent does at least exist to register a directory watch with notify. This is done for performance reasons and to simplify the pending-watch complexity (such as limiting recursion and fs event spam). However, this may change if a need presents itself.

Minimum Supported Rust Version (MSRV)

This crate is guaranteed to compile on stable Rust 1.60 and up.

License

Licensed under either of

at your option.

Contribution

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.

Dependencies

~3–16MB
~138K SLoC