2个稳定版本
3.0.2 | 2021年12月18日 |
---|---|
3.0.0 |
|
2.2.1 |
|
1.0.2 | 2021年6月15日 |
在 调试 中排名第 276
每月下载 144 次
在 abd-clam 中使用
91KB
801 行(不含注释)
mt_logger
是一个专注于可追溯性和通过宏实现易用性的多线程Rust日志库。
日志存储在名为 logs
的目录中,位于程序启动时的当前工作目录内。如果目录不存在,则会创建。日志文件名符合 ISO 8601 标准,但将冒号 :
替换为 _
以满足Windows文件命名要求。默认情况下,将包名(从环境变量 CARGO_PKG_NAME
中获取)添加到日志文件名前。
示例:cool_game_engine/logs/cool_game_engine_2021-06-27T22_08_38.474-0600.log
在初始化时,创建一个线程来接收主线程的日志消息和命令。在发送之前设置时间戳,以保持完整的可追溯性。
用法
推荐使用宏来使用 mt_logger
。通过 mt_new!()
创建全局日志发送/接收对,因此所有进一步的日志消息和命令都可以通过调用适当的宏来发出,例如,使用 mt_log!()
发送日志消息。不需要传递日志实例的引用,也不需要克隆 mpsc::Sender
!
此外,所有宏在全局实例未初始化时本质上不执行任何操作。这允许以最小的代码影响启用/禁用日志记录。例如,一个程序可能只在传递-log
开关时调用mt_new!()
,从而使程序在省略开关时能够静默运行。
注意
尽管保证了准确的时间戳和消息的正确顺序,但由于多线程的性质,记录日志消息到输出流的时间是不确定的。宏mt_flush!()
解决了这个问题。它将阻塞,直到所有排队消息都刷新到指定的输出流中。建议在程序关闭时调用此宏,否则任何排队消息都将丢失。
示例
use mt_logger::*;
fn main() {
// Initialize the mt_logger global instance
mt_new!(None, Level::Info, OutputStream::Both);
// Send a log message that WILL be output to BOTH file and stdout
mt_log!(Level::Info, "Message {}: an INFO message", 1);
// Send a log message that WILL NOT be output
mt_log!(Level::Debug, "Message {}: a DEBUG message", 2);
// Change the output stream to stdout only
mt_stream!(OutputStream::StdOut);
// Change the logging level
mt_level!(Level::Trace);
// Send a log message that WILL be output to stdout ONLY
mt_log!(Level::Info, "Message {}: an INFO message", 3);
// Send a log message that WILL be output to stdout ONLY
mt_log!(Level::Trace, "Message {}: a TRACE message", 4);
// Flush to ensure all messages reach the specified output
mt_flush!().unwrap();
// Get a count of the number of log messages
let msg_count = mt_count!();
println!("Messages logged: {}", msg_count);
}
输出样本
控制台
文件
2021-06-27T21:09:21.221721100: [ TRACE ] mt_logger::tests::format_verification() line 597:
This is a TRACE message.
2021-06-27T21:09:21.334663300: [ DEBUG ] mt_logger::tests::format_verification() line 598:
This is a DEBUG message.
2021-06-27T21:09:21.334673300: [ INFO ] mt_logger::tests::format_verification() line 599:
This is an INFO message.
2021-06-27T21:09:21.334677300: [ WARNING ] mt_logger::tests::format_verification() line 600:
This is a WARNING message.
2021-06-27T21:09:21.334680800: [ ERROR ] mt_logger::tests::format_verification() line 601:
This is an ERROR message.
2021-06-27T21:09:21.334684300: [ FATAL ] mt_logger::tests::format_verification() line 602:
This is a FATAL message.
依赖
~1MB
~19K SLoC