#logging #cloud-watch #aws #async #aws-sdk #rusoto-aws

cloudwatch_logging

一个用于将日志记录到AWS CloudWatch日志的简单库

14个版本 (1个稳定版)

1.0.0 2023年9月14日
0.2.51 2023年9月12日
0.1.15 2023年4月21日

#240 in 调试

Download history 11/week @ 2024-04-02 97/week @ 2024-07-02

每月下载 97次

MIT 许可证

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 将更新为使用它。

测试注意事项

  1. AWS API 调用:此库中的测试直接与 AWS API 交互。在运行测试之前,请确保您的 AWS 凭据设置正确。
  2. AWS 费用:一些测试旨在对库进行压力测试,这可能导致您的 AWS 账户产生费用。在运行任何测试之前,请了解潜在的 AWS 费用。Omena Inc. 对任何产生的费用不承担责任。
  3. 日志组和流:测试针对特定的日志组和流(在示例中引用)。在测试期间创建的所有资源将被自动清理。
  4. 并行执行:避免并行运行测试,因为它们都交互相同的日志组和流。并发运行会导致断言失败。

运行测试:

  • 标准测试:

    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