美文网首页GoRust Crate
Rust Crate 使用:log4rs

Rust Crate 使用:log4rs

作者: kayryu | 来源:发表于2019-04-16 21:41 被阅读20次

    log4rs

    Github
    Crates.io

    介绍

    log4rs是一个高效的日志库框架,借鉴了 java 的 Logback 和 log4j。

    log4rs能做什么?提供了输出到文件控制台两种方式。

    大部分用户会使用控制台输出,在 linux 中输出到控制台信息可以重定向到文件,灵活度高。

    输出到文件时,你可能需要限制文件大小,文件拆分,文件回滚功能,这些log4rs都提供了。

    使用

    log4rs支持两种配置方式,基于编程方式配置和基于YAML文件配置。 如果需要频繁修改配置的,建议使用YAML文件配置,这有效减少重新编译次数。

    基于编程方式配置

    #[macro_use]
    extern crate log;
    extern crate log4rs;
    
    use log::LevelFilter;
    use log4rs::append::console::ConsoleAppender;
    use log4rs::append::file::FileAppender;
    use log4rs::encode::pattern::PatternEncoder;
    use log4rs::config::{Appender, Config, Logger, Root};
    
    fn init_log() {
        let stdout = ConsoleAppender::builder()
            .encoder(Box::new(PatternEncoder::new("[Console] {d} - {l} -{t} - {m}{n}")))
            .build();
    
        let file = FileAppender::builder()
            .encoder(Box::new(PatternEncoder::new("[File] {d} - {l} - {t} - {m}{n}")))
            .build("log/test.log")
            .unwrap();
    
        let config = Config::builder()
            .appender(Appender::builder().build("stdout", Box::new(stdout)))
            .appender(Appender::builder().build("file", Box::new(file)))
            .logger(Logger::builder()
                .appender("file")
                .additive(false)
                .build("app", LevelFilter::Info))
            .build(Root::builder().appender("stdout").build(LevelFilter::Info))
            .unwrap();
    
        let _ = log4rs::init_config(config).unwrap();
    }
    
    fn main() {
        init_log();
        trace!("A trace");
        debug!("A debug");
        info!("A info");
        info!(target:"app", "File info");
        warn!("A warn");
        error!("A error");
    }
    

    上面代码根据输出目标不同,分别输出到控制台和文件。

    • appender控制输出到什么地方去,例子添加了输出到文件和控制台。
    • encoder按什么格式输出,在appender中配置。
    • logger日志实例,例子构建了一个输出到文件,目标为app的日志实例。

    并构建了一个全局日志实例,它输出到控制台。所以上面代码运行后控制台输出是

    [Console] 2019-04-16T20:55:34.434982200+08:00 - INFO -u_log4rs - A info
    [Console] 2019-04-16T20:55:34.436987600+08:00 - WARN -u_log4rs - A warn
    [Console] 2019-04-16T20:55:34.438002100+08:00 - ERROR -u_log4rs - A error
    

    文件:

    [File] 2019-04-16T20:55:34.436987600+08:00 - INFO - app - File info
    

    因为 info!(target:"app", "File info"); 这代码执行时,与文件输出方式匹配。

    基于YAML文件配置

    把前面的例子翻译成YAML文件,就是如下:

    appenders:
      # An appender named "stdout" that writes to stdout
      stdout:
        kind: console
        encoder:
          pattern: "[Console] {d} - {l} -{t} - {m}{n}"
    
      # An appender named "file" that writes to a file with a custom pattern encoder
      file:
        kind: file
        path: "log/test.log"
        encoder:
          pattern: "[File] {d} - {l} - {t} - {m}{n}"
    
    # Set the default logging level to "warn" and attach the "stdout" appender to the root
    root:
      level: info
      appenders:
        - stdout
    
    loggers:
      # Route log events sent to the "app" logger to the "file" appender,
      # and *not* the normal appenders installed at the root
      app:
        level: info
        appenders:
          - file
        additive: false
    

    读取配置文件,并记录:

    #[macro_use]
    extern crate log;
    extern crate log4rs;
    
    fn main() {
        log4rs::init_file("log4rs.yml", Default::default()).unwrap();
        trace!("A trace");
        debug!("A debug");
        info!("A info");
        info!(target:"app", "File info");
        warn!("A warn");
        error!("A error");
    }
    

    输出和前例子一致,而代码简洁多了。

    参考

    https://blog.csdn.net/s_lisheng/article/details/78271032

    相关文章

      网友评论

        本文标题:Rust Crate 使用:log4rs

        本文链接:https://www.haomeiwen.com/subject/oyaiwqtx.html