Crates.io | tracing-cloudwatch |
lib.rs | tracing-cloudwatch |
version | 0.2.0 |
source | src |
created_at | 2023-05-05 19:35:31.413549 |
updated_at | 2024-10-12 10:17:25.765086 |
description | tracing-subscriber layer that sends your application's tracing events(logs) to AWS CloudWatch Logs |
homepage | |
repository | https://github.com/ymgyt/tracing-cloudwatch |
max_upload_size | |
id | 858004 |
size | 94,128 |
tracing-cloudwatch is a custom tracing-subscriber layer that sends your application's tracing events(logs) to AWS CloudWatch Logs.
We have supported rusoto and the AWS SDK as AWS clients.
feature awssdk
required
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[tokio::main]
async fn main() {
let config = aws_config::load_from_env().await;
let cw_client = aws_sdk_cloudwatchlogs::Client::new(&config);
tracing_subscriber::registry::Registry::default()
.with(
tracing_cloudwatch::layer().with_client(
cw_client,
tracing_cloudwatch::ExportConfig::default()
.with_batch_size(5)
.with_interval(std::time::Duration::from_secs(1))
.with_log_group_name("tracing-cloudwatch")
.with_log_stream_name("stream-1"),
)
.with_code_location(true)
.with_target(false),
)
.init();
}
feature rusoto
required
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[tokio::main]
async fn main() {
let cw_client = rusoto_logs::CloudWatchLogsClient::new(rusoto_core::Region::ApNortheast1);
tracing_subscriber::registry::Registry::default()
.with(
tracing_cloudwatch::layer().with_client(
cw_client,
tracing_cloudwatch::ExportConfig::default()
.with_batch_size(5)
.with_interval(std::time::Duration::from_secs(1))
.with_log_group_name("tracing-cloudwatch")
.with_log_stream_name("stream-1"),
)
.with_code_location(true)
.with_target(false),
)
.init();
}
tracing_subsriber::fmt::Layer
You can specify a pre-configured fmt::Layer
to control the log format.
For example, the following example outputs the logs in JSON format.
tracing_subscriber::registry::Registry::default()
.with(tracing_cloudwatch::layer()
.with_fmt_layer(
tracing_subscriber::fmt::layer()
.json()
.without_time()
)
)
.init();
Currently, following AWS IAM Permissions required
logs:PutLogEvents
This crate does not create a log group and log stream, so if the specified log group and log stream does not exist, it will raise an error.
We haven't implemented any custom retry logic or timeout settings within the crate. We assume that these configurations are handled through the SDK Client.
For instance, in the AWS SDK, you can set up these configurations using timeout_config
and retry_config
This project is licensed under the MIT license.