1 个不稳定版本
0.1.1 | 2022年12月11日 |
---|---|
0.1.0 |
|
#476 in 调试
34KB
709 行
log_loki
log_loki通过集成log crate,简化了将应用程序日志收集和发送到Loki实例的过程。
请注意,目前我并不认为这个crate已经准备好投入生产。我已经验证它“基本可以工作”,但我还没有编写完整的测试,也没有优化可能存在的任何低效之处。买者自慎!
安装
要将log_loki添加到您的项目中,请确保您的Cargo.toml
中包含以下两行:
log = "^0.4.17"
log_loki = "^0.1.0"
特性
此crate支持以下特性:
tls
- 使用rustls支持通过TLS与Loki通信。tls-native-certs
- 告诉底层的HTTP库ureq使用系统的证书存储,而不是webpki-roots存储,用于TLS。compress
- 使用GZIP(通过flate2 crate)压缩发送到Loki的日志。kv_unstable
- 启用对log crate结构化日志的实验性支持。logfmt
- 启用logfmt日志格式化器。
默认特性为tls
、tls-native-certs
、logfmt
和compress
。默认情况下,使用logfmt
特性格式化日志。如果禁用该特性,您必须提供自己的LokiFormatter
实现。
用法
要仅将日志记录到未认证的Loki实例,可以使用以下方法:
use log::{info, logger};
use log_loki::LokiBuilder;
use url::Url;
use std::collections::HashMap;
fn main() {
let mut labels = HashMap::new();
labels.insert("app", "myapp");
LokiBuilder::new(
Url::parse("https://loki.example.com/loki/api/v1/push").unwrap(),
labels,
).build().apply().unwrap();
info!("Hello, {}!", "world");
// The logger must be flushed before the application quits to ensure logs are not lost.
logger().flush();
}
通过LokiBuilder方法的.add_header()和.tls_config(),可以使用基于头部和mTLS的认证方案。
如果您还想将日志记录到其他位置(如日志文件、控制台等),可以使用Fern等日志框架将log_loki与其他日志实现结合使用
// Let loki be a Loki object
let colors = ColoredLevelConfig::default();
fern::Dispatch::new()
.level(log::LevelFilter::Trace)
.chain(Box::new(loki) as Box<dyn log::Log>)
.chain(fern::Dispatch::new()
.format(move |out, message, record| {
out.finish(format_args!("[{}] {}", colors.color(record.level()), message))
})
.chain(std::io::stdout())
.into_shared()
)
.apply().unwrap();
info!("Test!");
// call somewhere before the program ends
logger().flush();
刷新
为了提高效率,记录器内部缓冲日志消息,并在记录一定数量的消息或经过一定时间后等待。您可以使用分别的max_logs()
和max_log_lifetime()
LokiBuilder
方法调整消息数量或自动刷新之间的持续时间。还建议您在代码中安排所有退出路径调用logger().flush();
以最小化丢失日志的风险。
许可证
/*
Copyright (C) 2022 Aurora McGinnis
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
依赖关系
~6–18MB
~340K SLoC