## bunyarrs `bunyarrs` is a very opinionated, low performance logging library, modelled on [node bunyan](https://www.npmjs.com/package/bunyan). ```rust let logger = Bunyarr::with_name("my-module"); let foo = init_foo(); let bar = init_bar(); logger.info(vars! { foo, bar }, "initialisation complete"); ``` Will print, to stdout, on one line (whitespace added for the docs): ```json { "time":"2022-09-11T15:19:33.166395524Z", "level":30, "msg":"initialisation complete", "name":"my-module", "foo": 5, "bar": { "baz": 5, "badger": "mushroom" }, "hostname":"conqueeftador", "pid":1337, "v":0 } ``` ### Configuration The default log level is `info`, so `info` or higher will be generated. This can be controlled with the environment variable `LOG_LEVEL`, for example, `LOG_LEVEL=error` will hide any `debug`, `info`, or `warn` logs, but still show `error` and `fatal` logs. ### ...why? It's better than `eprintln!` and easier to get going with than `slog`. This "bunyan" format is supported by a number of log ingest tools. Using it saves you from attempting to handle objects, multi-line strings and the like during your log search. The library is designed to encourage good use of this format, specifically, there is no support for format strings, or dynamic strings at all, on purpose. Other tools, such as the [bunyan rust port](https://crates.io/crates/bunyan) and [pino-pretty](https://www.npmjs.com/package/pino-pretty) exist to turn these logs back into text, if you want to view them as text. Piping the above output through `pino-pretty` results in: ```text [16:19:33.166] INFO (my-module/1337): initialisation complete foo: 5 bar: { "baz": 5, "badger": "mushroom" } v: 0 ``` ### I need support for... Files, rotation? Nope. Write to stdout, it's well-supported by all orchestration tools. Threads, performance? Nope. Use the [`slog`](https://crates.io/crates/slog) ecosystem, and see their justification for the complexities. Objects, naming? Use the `serde` ecosystem tools. The existing rust-log ecosystem? Sorry, they use format strings, which is banned. Custom formatters? Maybe you want to write your own `vars!` macro? ### How slow is it? `Bunyarr::with_name()` tries not to do work, e.g. it pre-loads the hostname. `logger.info()` is probably more efficient than you building an object and writing it yourself, but probably less efficient than you writing out an object, and writing it yourself, if you're careful. Bunyarr tries to be very careful, but is not willing to sacrifice the interface for speed. ### Should I use this in a rust *library* I want people to use? No. ### Contributing `cargo fmt`, `cargo test`, github PRs or issues, please. ### License MIT OR Apache-2.0