#logging #datadog

datadog-logs

Simple client library for DataDog logs

3 unstable releases

0.2.1 Feb 21, 2021
0.2.0 Feb 21, 2021
0.1.0 Sep 4, 2020

#12 in #datadog

Download history 5/week @ 2022-08-13 11/week @ 2022-08-20 3/week @ 2022-08-27 87/week @ 2022-09-03 54/week @ 2022-09-10 73/week @ 2022-09-17 7/week @ 2022-09-24 28/week @ 2022-10-01 39/week @ 2022-10-08 59/week @ 2022-10-15 14/week @ 2022-10-22 25/week @ 2022-10-29 33/week @ 2022-11-05 77/week @ 2022-11-12 33/week @ 2022-11-19 44/week @ 2022-11-26

197 downloads per month

MIT license

30KB
532 lines

Datadog Logs

What

datadog-logs is a minimalistic crate for logging to DataDog. It does it directly via HTTP(S) using DataDog's public API.

How

Logger consists of two parts - logging facade that sends messages to dedicated thread or task that batches messages to send to DataDog as presented on sequence diagram below.

sequence diagram of workflow

Thanks to such a workflow logging should not affect throughput of your application, nor force you to handle errors arising from HTTP.

Why

Author found no existing library that could be used for this purpose.

Feature flags

  • log-integration - enables integration with log crate (enabled by default)

lib.rs:

About

datadog-logs is a DataDog logs API client with log integration.

Provides support for HTTP DataDog logs ingestion API. Supports blocking and nonblocking HTTP(S) clients activated by feature flags.

Logger is easily configurable with extensive DataDogConfig that can be deserialized directly from file thanks to serde.

It offloads the job of sending logs to DataDog to a separate thread (blocking logger) or task (nonblocking logger).

Using with log crate

use datadog_logs::{config::DataDogConfig, logger::DataDogLogger, client::HttpDataDogClient};
use log::*;

# async fn func() {
let config = DataDogConfig::default();
let client = HttpDataDogClient::new(&config).unwrap();
 // there is also a blocking logger available that does not require runtime
let future = DataDogLogger::set_nonblocking_logger(client, config, LevelFilter::Error).unwrap();

 // there is a convinence function available to spawn future to tokio
 // however, this design makes it compatible with every runtime without effort
tokio::spawn(future);

 // now you can log
error!("An error occured");
warn!("A warning");
# }

Dependencies

~3–13MB
~271K SLoC