# forestry
[](https://crates.io/crates/forestry/)
[](https://crates.io/crates/forestry/)
[](https://github.com/uptudev/forestry/actions/workflows/rust.yml)
A simple, efficient, concise, and elegant logging library for Rust.
## Table of Contents
* [Installation](#installation)
* [Dependencies](#dependencies)
* [Usage](#usage)
* [Contributing](#contributing)
* [License](#license)
## Installation
To install forestry, simply add it to your Rust project via Cargo:
```bash
cargo add forestry
```
## Dependencies
Forestry depends on the `colored` crate for colorized output.
## Usage
Forestry is a simple logging library that allows you to log messages to the console with different levels of severity. Here's an example of how to use it:
`src/main.rs`
```rust
use forestry::prelude::*;
let log = Logger::new();
log.info("This is an info message.");
log.warn("This is a warning message.");
log.error("This is an error message.");
log.success("This is a success message.");
log.critical("This is a critical message.");
```
These calls can also be inlined as follows
`src/main.rs`
```rust
use forestry::prelude::*
let log = Logger::new();
log.info("This is an info message.")
.warn("This is a warning message.")
.error("This is an error message.")
.success("This is a success message.")
.critical("This is a critical message.");
```
This will output the following to the console:
```
[0000:*] This is an info message.
[0001:~] This is a warning message.
[0002:!] This is an error message.
[0003:+] This is a success message.
[0004:%] This is a critical message.
```
It will also be coloured in most terminals.
All formatting is optional; please see the documentation at [Docs.rs](https://docs.rs/forestry/latest/forestry/index.html), specifically for `crate::logs::Options`. Optional file output and timer inclusion is also supported via the same `crate::logs::Options` enum.
### Async
Forestry also supports asynchronous logging. To enable this feature, simply add the `async` feature to `forestry`'s declaration in your `Cargo.toml` file.
#### Example
First, add the `async` feature to `forestry` in your `Cargo.toml` file by changing the default declaration to either of the following:
`Cargo.toml`
```toml
[dependencies]
forestry = { version = ">=1.5", features = ["async"] }
```
or
`Cargo.toml`
```toml
[dependencies.forestry]
version = ">=1.5"
features = ["async"]
```
Then, the logger's internal print calls will be asynchronous futures. This is useful for logging in async functions or in async contexts. `await`ing the logger's methods will return the same `&mut Logger` as before, so chaining is still possible (although only by adding `await` to every call).
## Contributing
If you would like to contribute to forestry, please open an issue or submit a pull request.
## License
This code is dual-licensed under either the MIT or Apache 2.0 license, at your option. Please see the `LICENSE` file for more information.