Last updated 27th July, 2020
Objective
This guide will show you how to push your logs to Logs Data Platform using Rust.
Rust has a logging implementation (log) which is widely used. OVHcloud has implemented this system to support the GELF format:
- gelf_logger: This is a minimal logger.
- log4rs-gelf: Based on gelf_logger, this implementation is compatible with the complex configurable framework log4rs.
Those loggers will:
- serialize log entries using the serde_gelf crate.
- bufferize the result into memory.
- batch send over network using TCP/TLS.
- a facility to ensure fields suits the LDP naming conventions.
Requirements
To complete this guide you will need:
- Rust, we recommend the Nightly version.
- Activated your Logs Data Platform account.
- To create at least one Stream and get its token.
gelf_logger
You can start using it by first adding it to your Cargo.toml
:
[dependencies]
gelf_logger = { version = "0.1", features = ["ovh-ldp"] }
# or
[dependencies.gelf_logger]
version = "0.1"
features = ["ovh-ldp"]
End then in you main.rs
:
extern crate gelf_logger;
#[macro_use]
extern crate log;
fn main() {
let cfg = Config::ldp("gra1.logs.ovh.com", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
// Initialize logger
gelf_logger::init(cfg).unwrap();
// Send log using a macro defined in the create log
info!("common message");
// make sure all buffered records are sent before exiting
gelf_logger::flush().unwrap();
}
You could also look at the generated API documentaton.
log4rs-gelf
You can start using it by first adding it to your Cargo.toml
:
[dependencies]
log4rs_gelf = { version = "0.1", features = ["ovh-ldp"] }
# or
[dependencies.log4rs_gelf]
version = "0.1"
features = ["ovh-ldp"]
Examples
From a YAML configuration file
appenders:
ldp:
additional_fields:
component: rust-cs
buffer_duration: 5
buffer_size: 5
hostname: 127.0.0.1
kind: buffer
level: Informational
null_character: true
port: 12202
use_tls: false
root:
appenders:
- ldp
level: info
And then:
extern crate log4rs_gelf;
fn main() {
log4rs_gelf::init_file("/tmp/log4rs.yml", None).unwrap();
// Do whatever
log4rs_gelf::flush().expect("Failed to send buffer, log records can be lost !");
}
Programmatically constructing a configuration
extern crate log;
extern crate log4rs;
extern crate log4rs_gelf;
use log4rs::config::{Config, Appender, Root};
use log::LevelFilter;
fn main() {
let buffer = log4rs_gelf::BufferAppender::builder("gra1.logs.ovh.com","XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
.build()
.unwrap();
let config = Config::builder()
.appender(Appender::builder().build("gelf", Box::new(buffer)))
.build(Root::builder().appender("gelf").build(LevelFilter::Info))
.unwrap();
log4rs_gelf::init_config(config).unwrap();
// Do whatever
log4rs_gelf::flush().expect("Failed to send buffer, log records can be lost !");
}
You could also look at the generated API documentation.
Go further
- Getting Started: Quick Start
- Documentation: Guides
- Community hub: https://community.ovh.com
- Create an account: Try it!
Cette documentation vous a-t-elle été utile ?
N’hésitez pas à nous proposer des suggestions d’amélioration afin de faire évoluer cette documentation.
Images, contenu, structure… N’hésitez pas à nous dire pourquoi afin de la faire évoluer ensemble !
Vos demandes d’assistance ne seront pas traitées par ce formulaire. Pour cela, utilisez le formulaire "Créer un ticket" .
Merci beaucoup pour votre aide ! Vos retours seront étudiés au plus vite par nos équipes..