1use std::env;
2
3use gelf_logger::{
4 gelf_alert, gelf_critical, gelf_debug, gelf_emergency, gelf_error, gelf_info, gelf_log,
5 gelf_notice, gelf_warn, Builder, GelfLevel, Value,
6};
7use log::{error, info, warn};
8use serde::Serialize;
9
10fn main() {
11 let mut builder = Builder::new()
13 .parse_filters("debug")
14 .extend_additional_fields([(
15 "instance".to_owned(),
16 Value::String("instance-1".to_owned()),
17 )]);
18 builder = match env::args().nth(1).unwrap_or("stderr".to_owned()).as_str() {
19 "stdout" => builder.stdout(),
20 "stderr" => builder.stderr(),
21 endpoint => {
22 let (hostname, port) = endpoint.split_once(':').expect("invalid tcp endpoint");
23 builder
24 .hostname(hostname.to_owned())
25 .port(port.parse().expect("invalid port"))
26 }
27 };
28 builder.init();
29
30 info!(count = 5; "packet received");
32 warn!(user = "foo"; "unknown user");
33 error!(err:err = "abc".parse::<u32>().unwrap_err(); "parse error");
34
35 let req = Request {
36 id: 42,
37 method: "GET",
38 path: "/login",
39 };
40 info!(req:?; "incoming request");
42 info!(req:serde; "incoming request");
44
45 gelf_log!(GelfLevel::Emergency, foo = "bar"; "an emergency log");
47 gelf_emergency!(foo = "bar"; "an emergency log");
48 gelf_alert!(foo = "bar"; "an alert log");
49 gelf_critical!(foo = "bar"; "a critical log");
50 gelf_error!(foo = "bar"; "an error log");
51 gelf_warn!(foo = "bar"; "a warn log");
52 gelf_notice!(foo = "bar"; "a notice log");
53 gelf_info!(foo = "bar"; "an info log");
54 gelf_debug!(foo = "bar"; "a debug log");
55
56 log::logger().flush();
59}
60
61#[derive(Serialize, Debug)]
62struct Request<'a> {
63 id: u16,
64 method: &'a str,
65 path: &'a str,
66}