Rust Crate 使用:log4rs

log4rs

Github
Crates.io

介紹

log4rs是一個高效的日志庫框架,借鑒了 java 的 Logback 和 log4j。

log4rs能做什么?提供了輸出到文件控制臺兩種方式。

大部分用戶會使用控制臺輸出,在 linux 中輸出到控制臺信息可以重定向到文件,靈活度高。

輸出到文件時,你可能需要限制文件大小,文件拆分,文件回滾功能,這些log4rs都提供了。

使用

log4rs支持兩種配置方式,基于編程方式配置和基于YAML文件配置。 如果需要頻繁修改配置的,建議使用YAML文件配置,這有效減少重新編譯次數(shù)。

基于編程方式配置

#[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] u0z1t8os - {l} -{t} - {m}{n}")))
        .build();

    let file = FileAppender::builder()
        .encoder(Box::new(PatternEncoder::new("[File] u0z1t8os - {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");
}

上面代碼根據(jù)輸出目標不同,分別輸出到控制臺和文件。

  • appender控制輸出到什么地方去,例子添加了輸出到文件和控制臺。
  • encoder按什么格式輸出,在appender中配置。
  • logger日志實例,例子構(gòu)建了一個輸出到文件,目標為app的日志實例。

并構(gòu)建了一個全局日志實例,它輸出到控制臺。所以上面代碼運行后控制臺輸出是

[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"); 這代碼執(zhí)行時,與文件輸出方式匹配。

基于YAML文件配置

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

appenders:
  # An appender named "stdout" that writes to stdout
  stdout:
    kind: console
    encoder:
      pattern: "[Console] u0z1t8os - {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] u0z1t8os - {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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,148評論 0 6
  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,203評論 1 13
  • 作為Java開發(fā)人員,對于日志記錄框架一定非常熟悉。而且?guī)缀踉谒袘美锩?,一定會用到各種各樣的日志框架用來記錄程...
    意識流丶閱讀 14,455評論 0 13
  • 一、Log4j簡介 Log4j有三個主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護閱讀 1,976評論 2 8
  • 1年之守,3年之痛,5年之離,7年之癢。感情的生活如此,職場何嘗不是,而立之年,不進則退。 生物學上講,是大概過了...
    WhatIfYou閱讀 411評論 0 1

友情鏈接更多精彩內(nèi)容