14个版本 (1个稳定版)
1.0.0 | 2023年9月14日 |
---|---|
0.2.51 | 2023年9月12日 |
0.1.15 | 2023年4月21日 |
#240 in 调试
每月下载 97次
50KB
799 行
CloudWatch Logging
CloudWatch Logging crate提供了一个简单高效的方法来记录到Amazon CloudWatch。
特性
- 为CloudWatch日志记录提供简单的配置。
- 自动批处理和非阻塞刷新以实现最佳性能。
- 无缝的panic记录以提高可靠性。
- 单例特性,方便从应用程序的任何位置访问记录器。
- 线程安全,确保在多线程应用程序中日志记录的一致性。
安装
将以下依赖项添加到你的 Cargo.toml
文件中
[dependencies]
cloudwatch-logging = "1.0.0"
用法
use cloudwatch_logging::prelude::*;
async fn example() -> Result<(), LoggerError> {
let logger = LoggerHandle::setup(
"test-group", // log group
"test-stream", // log stream
20, // batch size
Duration::from_secs(5), // flush interval
).await?;
logger.info("Hello, world!".to_string()).await?;
logger.error("Something went wrong!".to_string()).await
}
cloudwatch_logging::__doc_test!(example);
记录panic
use cloudwatch_logging::prelude::*;
async fn example() -> Result<(), LoggerError> {
let logger = LoggerHandle::setup(
"test-group", // log group
"test-stream", // log stream
20, // batch size
Duration::from_secs(5), // flush interval
).await?;
logger.log_panics(); // future panics will be logged to cloudwatch
panic!("This will be logged to cloudwatch!");
Ok(())
}
cloudwatch_logging::__doc_test_panics!(example, "This will be logged to cloudwatch!");
singleton
功能
use cloudwatch_logging::prelude::*;
#[cfg(feature = "singleton")]
async fn example() -> Result<(), LoggerError> {
let logger = LoggerHandle::get_or_setup( // will only setup once
"test-group", // log group
"test-stream", // log stream
20, // batch size
Duration::from_secs(5), // flush interval
).await?;
logger.info("Hello, world!".to_string()).await?;
logger.error("Something went wrong!".to_string()).await
}
#[cfg(feature = "singleton")]
cloudwatch_logging::__doc_test!(example);
singleton
功能:使用环境变量初始化
use cloudwatch_logging::prelude::*;
use std::env;
#[cfg(feature = "singleton")]
async fn example() -> Result<(), LoggerError> {
env::set_var("TEST_GROUP", "test-group");
env::set_var("TEST_STREAM", "test-stream");
let logger = LoggerHandle::get_or_setup_with_env(
"TEST_GROUP", // log group env var
"TEST_STREAM", // log stream env var
20, // batch size
Duration::from_secs(5), // flush interval
).await?;
logger.info("Hello, world!".to_string()).await?;
logger.error("Something went wrong!".to_string()).await
}
#[cfg(feature = "singleton")]
cloudwatch_logging::__doc_test!(example);
文档
有关更多信息,请参阅当前文档。
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE 文件。
版本 1.0.0 (稳定版)
cloudwatch_logging
已正式稳定!虽然将添加新功能,但API将保持不变。
即将推出的功能
-
log
crate 支持 -
tracing
crate 支持
以前的重大变更
版本 0.2.0
- 入口点现在是
LoggerHandle
而不是Logger
Logger::get
现在是LoggerHandle::get_or_setup
,在启用singleton
功能的情况下- 现在接受静态字符串切片而不是所有者字符串。
API现在是稳定的,除非进行主要版本升级,否则不会更改。迁移到新版本需要非常少的努力,除了入口点外,所有内容保持不变。
致谢
我们想感谢Rusoto社区在AWS SDK方面所做的不凡工作,他们深思熟虑的Smithy实现以及对Rust社区的奉献。
Rusoto 和官方 AWS SDK for Rust
Rusoto 已不再维护,尽管如此,它仍然适用于并用于生产环境。一旦官方 AWS SDK for Rust 稳定,此 crate 将更新为使用它。
测试注意事项
- AWS API 调用:此库中的测试直接与 AWS API 交互。在运行测试之前,请确保您的 AWS 凭据设置正确。
- AWS 费用:一些测试旨在对库进行压力测试,这可能导致您的 AWS 账户产生费用。在运行任何测试之前,请了解潜在的 AWS 费用。Omena Inc. 对任何产生的费用不承担责任。
- 日志组和流:测试针对特定的日志组和流(在示例中引用)。在测试期间创建的所有资源将被自动清理。
- 并行执行:避免并行运行测试,因为它们都交互相同的日志组和流。并发运行会导致断言失败。
运行测试:
-
标准测试:
cargo test --features "doc_tests" -- --test-threads=1
-
包括 Loom 模型:
cargo test --features "doc_tests loom" -- --test-threads=1
-
压力测试:
cargo test --features "doc_tests im_ok_paying_for_testing" -- --test-threads=1
依赖关系
~10–20MB
~272K SLoC