美文网首页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

    log4rs Github Crates.io 介绍 log4rs是一个高效的日志库框架,借鉴了 java 的 ...

  • rust05模块

    库(crate) Rust中有四种库(crate):core crate(核心库)、std crate(标准库)、...

  • Rust Crate 使用:rustbreak

    rustbreak Github Crates.io 前言 持久化就是把数据保存到可掉电式存储设备中以供之后使用...

  • Rust Crate 使用:serde

    serde Github Crates.io 前言 序列化和反序列化是非常通用的功能,在网络传输,数据存储上极其...

  • Rust Crate 使用:structopt

    structopt Github Crates.io 前言 在前一篇介绍了命令行解析库clap,它支持函数调用模...

  • Rust Crate 使用:clap

    Clap Github Crates.io 前言 狠狠狠好用的库介绍。如果你对控制台情有独钟,必然会接触到命令行...

  • RUST AVR COMPILE

    https://book.avr-rust.com/004-flashing-a-crate-to-chip.ht...

  • [Rust] 导入和模块

    Rust中将传统的lib或者库称为 crate, 通常的包称为模块(module), 使用use关键字引用crat...

  • Rust Crate 使用:error-chain

    Error-chain Github crates.io 前言 错误和异常傻傻分不清,这里统称为错误吧。Rust ...

  • Rust for cpp devs - 用 Packages C

    Rust 中包含三个不同层级的结构: package crate module package 是由一个或多个 c...

网友评论

    本文标题:Rust Crate 使用:log4rs

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