diem_logger/
event.rs

1// Copyright (c) The Diem Core Contributors
2// SPDX-License-Identifier: Apache-2.0
3
4// Copyright 2021 Conflux Foundation. All rights reserved.
5// Conflux is free software and distributed under GNU General Public License.
6// See http://www.gnu.org/licenses/
7
8use crate::{Metadata, Schema};
9use std::fmt;
10
11/// An individual structured logging event from a log line.  Includes the
12#[derive(Debug)]
13pub struct Event<'a> {
14    metadata: &'a Metadata,
15    /// The format message given from the log macros
16    message: Option<fmt::Arguments<'a>>,
17    keys_and_values: KeysAndValues<'a>,
18}
19
20impl<'a> Event<'a> {
21    fn new(
22        metadata: &'a Metadata, message: Option<fmt::Arguments<'a>>,
23        keys_and_values: &'a [&'a dyn Schema],
24    ) -> Self {
25        Self {
26            metadata,
27            message,
28            keys_and_values: KeysAndValues(keys_and_values),
29        }
30    }
31
32    pub fn dispatch(
33        metadata: &'a Metadata, message: Option<fmt::Arguments<'a>>,
34        keys_and_values: &'a [&'a dyn Schema],
35    ) {
36        let event = Event::new(metadata, message, keys_and_values);
37        crate::logger::dispatch(&event)
38    }
39
40    pub fn metadata(&self) -> &'a Metadata { &self.metadata }
41
42    pub fn message(&self) -> Option<fmt::Arguments<'a>> { self.message }
43
44    pub fn keys_and_values(&self) -> &'a [&'a dyn Schema] {
45        &self.keys_and_values.0
46    }
47}
48
49/// Keys and values given from the log `a = b` macros
50#[derive(Clone)]
51struct KeysAndValues<'a>(&'a [&'a dyn Schema]);
52
53impl<'a> fmt::Debug for KeysAndValues<'a> {
54    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
55        let mut visitor = f.debug_map();
56        for key_value in self.0 {
57            key_value.visit(&mut visitor);
58        }
59        visitor.finish()
60    }
61}