#logging #opinionated #info #variables #hostname #time #bunyan-like

bunyarrs

针对小型工具/应用程序的具有偏见的bunyan-like日志记录器

2个不稳定版本

0.2.0 2023年1月15日
0.1.0 2022年9月11日

#447 in 调试

MIT/Apache

15KB
258

bunyarrs

bunyarrs 是一个非常具有偏见的、低性能的日志记录库,模仿了 node bunyan

let logger = Bunyarr::with_name("my-module");

let foo = init_foo();
let bar = init_bar();

logger.info(vars! { foo, bar }, "initialisation complete");

将打印到stdout,一行(为了文档添加了空格)

{
  "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
}

配置

默认日志级别为 info,因此将生成 info 或更高级别的日志。这可以通过环境变量 LOG_LEVEL 来控制,例如,LOG_LEVEL=error 将隐藏所有 debuginfowarn 日志,但仍会显示 errorfatal 日志。

...为什么?

它比 eprintln! 更好,比 slog 更容易上手。

此 "bunyan" 格式由许多日志摄入工具支持。使用它可以在日志搜索期间节省您处理对象、多行字符串等。

该库旨在鼓励使用此格式,具体来说,出于故意,不支持格式字符串或任何动态字符串。

其他工具,如 bunyan rust 端口pino-pretty,可以将这些日志转换回文本,如果您想将其作为文本查看。将上述输出通过 pino-pretty 管道的结果是

[16:19:33.166] INFO (my-module/1337): initialisation complete
    foo: 5
    bar: {
      "baz": 5,
      "badger": "mushroom"
    }
    v: 0

我需要支持...

文件、轮换?不。写入stdout,所有编排工具都很好地支持它。

线程、性能?不。使用 slog 生态系统,并查看他们的复杂性的理由。

对象、命名?使用 serde 生态系统工具。

现有的 rust-log 生态系统?抱歉,它们使用格式字符串,这是禁止的。

自定义格式化器?也许你想写自己的 vars! 宏?

有多慢?

Bunyarr::with_name() 尽量不做工作,例如,它预先加载主机名。

logger.info() 可能比你自己构建对象并写入更高效,但如果你小心,可能比你自己手动写出对象并写入要低效。Bunyarr 尽力做到非常小心,但不愿意为了速度而牺牲接口。

我应该在我的 Rust 中使用这个吗?

不。

贡献

cargo fmtcargo test,github PRs 或 issues,请。

许可证

MIT OR Apache-2.0

依赖项

~1.9–10MB
~49K SLoC