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.
Add linemux to your Cargo.toml
with:
toml
[dependencies]
linemux = "0.1"
```rust use linemux::MuxedLines; use tokio::stream::StreamExt;
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 Some(Ok(line)) = lines.next().await {
println!("source: {}, line: {}", line.source().display(), line.line());
}
} ```
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.
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.