1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Copyright 2024 The gelf_logger Authors. All rights reserved.
//! # gelf_logger
//!
//! The Graylog Extended Log Format ([GELF](http://docs.graylog.org/en/latest/pages/gelf.html)) is a log format that avoids the shortcomings of classic
//! log formats. GELF is a great choice for logging from within applications.
//! There are libraries and appenders for many programming languages and logging
//! frameworks so it is easy to implement. You could use GELF to send every
//! exception as a log message to your Graylog cluster.
//!
//! The logger will:
//! 1. serialize log entries using the [serde_gelf](https://crates.io/crates/serde_gelf)
//! crate.
//! 2. bufferize the result into memory.
//! 3. batch send over network using TCP/TLS.
//!
//! ## Example
//!
//! ```rust
//! use std::time::Duration;
//!
//! use gelf_logger::{gelf_warn, Config, GelfLevel};
//! use log::info;
//! use serde_derive::Serialize;
//!
//! #[derive(Serialize)]
//! struct Myapp {
//! name: String,
//! version: String,
//! }
//!
//! impl Default for Myapp {
//! fn default() -> Myapp {
//! Myapp {
//! name: env!("CARGO_PKG_NAME").into(),
//! version: env!("CARGO_PKG_VERSION").into(),
//! }
//! }
//! }
//!
//! let cfg = Config::builder()
//! .set_hostname("localhost".into())
//! .set_port(12202)
//! .set_level(GelfLevel::Informational)
//! .set_buffer_duration(Duration::from_millis(300))
//! .set_buffer_size(500)
//! .put_additional_field("myValue".into(), gelf_logger::Value::I64(10))
//! .set_null_character(true)
//! .build();
//!
//! // Initialize logger
//! gelf_logger::init(cfg).unwrap();
//!
//! // Send log using a macro defined in the create log
//! info!("common message");
//!
//! // Use a macro from gelf_logger to send additional data
//! gelf_warn!(extra: &Myapp::default(), "My app info");
//!
//! // make sure all buffered records are sent before exiting
//! gelf_logger::flush().unwrap();
//! ```
#![doc(
html_logo_url = "https://eu.api.ovh.com/images/com-square-bichro.png",
html_favicon_url = "https://www.ovh.com/favicon.ico"
)]
#![deny(warnings, missing_docs, unreachable_pub)]
#[cfg(feature = "yaml")]
pub use batch::init_from_file;
pub use batch::{flush, init, init_processor, processor, Batch, BatchProcessor};
pub use buffer::Buffer;
pub use config::{Config, ConfigBuilder};
pub use output::GelfTcpOutput;
pub use result::Error;
#[doc(no_inline)]
pub use serde_gelf::{GelfLevel, GelfRecord};
#[doc(no_inline)]
pub use serde_value::Value;
mod batch;
mod buffer;
mod config;
mod formatter;
mod logger;
mod macros;
mod output;
mod result;