syslog_ng_common/
logger.rs

1// Copyright (c) 2016 Tibor Benke <ihrwein@gmail.com>
2//
3// Licensed under the Apache License, Version 2.0
4// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT
5// license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. All files in the project carrying such notice may not be copied,
7// modified, or distributed except according to those terms.
8
9use log::{LogRecord, LogMetadata, Log, LogLevelFilter};
10use messages::{InternalMessageSender, Msg};
11
12use log;
13
14pub fn init_logger() {
15    let _ = log::set_logger(|max_log_level| {
16        max_log_level.set(InternalLogger::level());
17        Box::new(InternalLogger)
18    });
19}
20
21
22pub struct InternalLogger;
23
24impl InternalLogger {
25    pub fn level() -> LogLevelFilter {
26        InternalMessageSender::level()
27    }
28}
29
30impl Log for InternalLogger {
31    fn enabled(&self, metadata: &LogMetadata) -> bool {
32        metadata.level() <= InternalMessageSender::level()
33    }
34
35    fn log(&self, record: &LogRecord) {
36        if self.enabled(record.metadata()) {
37            let message = format!("{}", record.args());
38            let level = Msg::from(record.level());
39            InternalMessageSender::create_and_send(level, message);
40        }
41    }
42}