| Crates.io | tracing-gcloud-layer |
| lib.rs | tracing-gcloud-layer |
| version | 0.2.6 |
| created_at | 2025-08-04 21:20:40.178606+00 |
| updated_at | 2025-09-10 10:32:43.707992+00 |
| description | A `tracing` layer for sending structured logs to Google Cloud Logging. |
| homepage | https://github.com/faramozzayw/tracing-gcloud-layer |
| repository | https://github.com/faramozzayw/tracing-gcloud-layer |
| max_upload_size | |
| id | 1781209 |
| size | 87,675 |
A robust and configurable tracing layer for Rust, delivering logs from the tracing ecosystem directly to Google Cloud Logging (Stackdriver).
Add to your Cargo.toml:
cargo add tracing-gcloud-layer
Generate a Google Cloud service account with the "Logs Writer" role and download the JSON key.
Initialize the tracing layer:
use tracing_gcloud_layer::DefaultGCloudLayerConfigBuilder;
use tracing_subscriber::Registry;
let (layer, _runtime) = DefaultGCloudLayerConfigBuilder::default()
.log_name("my-service")
.logger_credential(include_bytes!("../gcp-service-account.json"))
.build()
.expect("Invalid config")
.build_layer();
tracing_subscriber::registry()
.with(layer)
.init();
tracing::info!(user_id = 42, "User logged in");
Logs will appear in Google Cloud Logging under the configured log name
log_name: Log stream name in GCP (e.g., "stdout", "my-app").logger_credential: Service account credentials (as bytes).config: Batching, timeouts, and writer options.log_mapper: Plug in your own LogMapper to customize log transformation.use tracing_gcloud_layer::{GCloudLayerConfigBuilder, LogContext, LogMapper};
#[derive(Clone, Default)]
pub struct CustomLogMapper;
impl LogMapper for CustomLogMapper {
fn map(&self, context: LogContext, log_entry: serde_json::Value) -> serde_json::Value {
todo!("Custom mapping logic here")
}
}
let (layer, _runtime) = GCloudLayerConfigBuilder::<CustomLogMapper>::default()
.log_name("custom-logs")
.logger_credential(include_bytes!("../gcp.json"))
.log_mapper(CustomLogMapper)
.build()
.expect("Invalid config")
.build_layer();