Rust Crate 使用:log4rs

log4rs

Github
Crates.io

介紹

log4rs是一個(gè)高效的日志庫框架跺嗽,借鑒了 java 的 Logback 和 log4j萎馅。

log4rs能做什么宏所?提供了輸出到文件控制臺(tái)兩種方式竟闪。

大部分用戶會(huì)使用控制臺(tái)輸出,在 linux 中輸出到控制臺(tái)信息可以重定向到文件仇祭,靈活度高。

輸出到文件時(shí)颈畸,你可能需要限制文件大小前塔,文件拆分,文件回滾功能承冰,這些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] doossmj - {l} -{t} - {m}{n}")))
        .build();

    let file = FileAppender::builder()
        .encoder(Box::new(PatternEncoder::new("[File] bbtalrh - {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ù)輸出目標(biāo)不同迁霎,分別輸出到控制臺(tái)和文件吱抚。

  • appender控制輸出到什么地方去,例子添加了輸出到文件和控制臺(tái)考廉。
  • encoder按什么格式輸出秘豹,在appender中配置。
  • logger日志實(shí)例昌粤,例子構(gòu)建了一個(gè)輸出到文件既绕,目標(biāo)為app的日志實(shí)例。

并構(gòu)建了一個(gè)全局日志實(shí)例涮坐,它輸出到控制臺(tái)凄贩。所以上面代碼運(yùn)行后控制臺(tái)輸出是

[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

因?yàn)?info!(target:"app", "File info"); 這代碼執(zhí)行時(shí),與文件輸出方式匹配袱讹。

基于YAML文件配置

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

appenders:
  # An appender named "stdout" that writes to stdout
  stdout:
    kind: console
    encoder:
      pattern: "[Console] ebqqpv1 - {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] njmmxdi - {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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市救巷,隨后出現(xiàn)的幾起案子壶熏,更是在濱河造成了極大的恐慌,老刑警劉巖征绸,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件久橙,死亡現(xiàn)場離奇詭異,居然都是意外死亡管怠,警方通過查閱死者的電腦和手機(jī)淆衷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渤弛,“玉大人祝拯,你說我怎么就攤上這事∷希” “怎么了佳头?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晴氨。 經(jīng)常有香客問我康嘉,道長,這世上最難降的妖魔是什么籽前? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任亭珍,我火速辦了婚禮敷钾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肄梨。我一直安慰自己阻荒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布众羡。 她就那樣靜靜地躺著侨赡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粱侣。 梳的紋絲不亂的頭發(fā)上羊壹,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音甜害,去河邊找鬼舶掖。 笑死球昨,一個(gè)胖子當(dāng)著我的面吹牛尔店,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播主慰,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼嚣州,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了共螺?” 一聲冷哼從身側(cè)響起该肴,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藐不,沒想到半個(gè)月后匀哄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雏蛮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涎嚼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挑秉。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡法梯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出犀概,到底是詐尸還是另有隱情立哑,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布姻灶,位于F島的核電站铛绰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏产喉。R本人自食惡果不足惜捂掰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一若皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尘颓,春花似錦走触、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卧土,卻和暖如春惫皱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尤莺。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來泰國打工旅敷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颤霎。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓媳谁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親友酱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晴音,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 4,975評(píng)論 0 6
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況缔杉,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 4,997評(píng)論 1 13
  • 作為Java開發(fā)人員锤躁,對(duì)于日志記錄框架一定非常熟悉。而且?guī)缀踉谒袘?yīng)用里面或详,一定會(huì)用到各種各樣的日志框架用來記錄程...
    意識(shí)流丶閱讀 13,919評(píng)論 0 13
  • 一系羞、Log4j簡介 Log4j有三個(gè)主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,901評(píng)論 2 8
  • 1年之守杠人,3年之痛,5年之離宋下,7年之癢嗡善。感情的生活如此,職場何嘗不是学歧,而立之年罩引,不進(jìn)則退。 生物學(xué)上講枝笨,是大概過了...
    WhatIfYou閱讀 307評(píng)論 0 1