donnie4w / tklog

lightweight and efficient rust structured log library with support for log levels, file segmentation, compressed archiving
https://crates.io/crates/tklog
Apache License 2.0
58 stars 4 forks source link

tracing输出控制台没有颜色 #6

Closed cody-why closed 2 weeks ago

cody-why commented 3 weeks ago

rt

donnie4w commented 3 weeks ago

@cody-why 是的,tklog暂时没有直接提供颜色属性的设置函数。

如果需要颜色输出,可以通过set_formatter 来修改各种属性的参数。以下是示例。使用 colored库修改日志的各种属性的颜色

[dependencies]
colored = "2"
tklog = "0.0.10"

示例程序

use std::{thread, time::Duration};
use colored::*;
use tklog::{
    debug, error, fatal, info, trace, warn, LOG
};

fn log_init() {
    let levelstr  = "{level}".green().to_string();  //日志级别标识设置为绿色
    let timestr = "{time}".yellow().to_string();    // 时间属性标识设置为黄色
    let filestr = "{file}".red().to_string();       //文件属性标识设置为红色
    let messagestr = ":{message}";                    // 信息属性标识不修改颜色
    let s = levelstr+&timestr+&filestr+&messagestr+"\n";
    LOG.set_formatter(s.as_str());
}

#[test]
fn testlog() {
    log_init();
    trace!(module_path!());
    trace!("trace>>>>", "aaaaaaaaa", 1, 2, 3, 4);
    debug!("debug>>>>", "bbbbbbbbb", 1, 2, 3, 5);
    info!("info>>>>", "ccccccccc", 1, 2, 3, 5);
    warn!("warn>>>>", "dddddddddd", 1, 2, 3, 6);
    error!("error>>>>", "eeeeeeee", 1, 2, 3, 7);
    fatal!("fatal>>>>", "ffffffff", 1, 2, 3, 8);
    thread::sleep(Duration::from_secs(1))
}

这样就可以输出预定的颜色

donnie4w commented 3 weeks ago

如果需要设置不同日志级别的不同颜色输出,可以用set_level_option函数 ,如下示例

[dependencies]
colored = "2"
tklog = "0.1.0"

示例程序

use colored::*;
use std::{thread, time::Duration};
use tklog::{debug, error, fatal, info, trace, warn, LevelOption, LOG};

#[test]
fn testlog4level() {
    //设置LEVEL的fomatter

    //Debug  green
    let debugfmt = format!("{} {} {} {}\n", "{level}".green(), "{time}".green(), "{file}".green(), ":{message}".green());
    LOG.set_level_option(tklog::LEVEL::Debug, LevelOption { format: None, formatter: Some(debugfmt) });
    //Info   yellow
    let infofmt = format!("{} {} {} {}\n", "{level}".yellow(), "{time}".yellow(), "{file}".yellow(), ":{message}".yellow());
    LOG.set_level_option(tklog::LEVEL::Info, LevelOption { format: None, formatter: Some(infofmt) });
    //Warn  blue
    let warnfmt = format!("{} {} {} {}\n", "{level}".blue(), "{time}".blue(), "{file}".blue(), ":{message}".blue());
    LOG.set_level_option(tklog::LEVEL::Warn, LevelOption { format: None, formatter: Some(warnfmt) });
    //Error   red
    let errorfmt = format!("{} {} {} {}\n", "{level}".red(), "{time}".red(), "{file}".red(), ":{message}".red());
    LOG.set_level_option(tklog::LEVEL::Error, LevelOption { format: None, formatter: Some(errorfmt) });

    trace!("trace>>>>", "aaaaaaaaa", 1, 2, 3, 4);
    debug!("debug>>>>", "bbbbbbbbb", 1, 2, 3, 5);
    info!("info>>>>", "ccccccccc", 1, 2, 3, 5);
    warn!("warn>>>>", "dddddddddd", 1, 2, 3, 6);
    error!("error>>>>", "eeeeeeee", 1, 2, 3, 7);
    fatal!("fatal>>>>", "ffffffff", 1, 2, 3, 8);
    thread::sleep(Duration::from_secs(1))
}

这样就可以自由的设置各种标识与日志级别的输出颜色

donnie4w commented 3 weeks ago

若同一行用相同颜色,可以简单一点, 如

//Debug  green
LOG.set_level_option(tklog::LEVEL::Debug, LevelOption { format: None, formatter: Some("{level} {time} {file} :{message} \n".green().to_string()) });
cody-why commented 2 weeks ago

谢谢解答