Logging 如何实现附加到文件的记录器?
我正在尝试实现Logging 如何实现附加到文件的记录器?,logging,rust,Logging,Rust,我正在尝试实现log::log,以便调用log()将消息附加到文件中。这是我目前的日志: pub struct MyLogger { loglevel: LogLevelFilter, logfile: Option<File>, } pub结构MyLogger{ loglevel:LogLevelFilter, 日志文件:选项, } 以及log::log的实现: impl Log for Logger { fn enabled(&self, me
log::log
,以便调用log()
将消息附加到文件中。这是我目前的日志:
pub struct MyLogger {
loglevel: LogLevelFilter,
logfile: Option<File>,
}
pub结构MyLogger{
loglevel:LogLevelFilter,
日志文件:选项,
}
以及log::log的实现:
impl Log for Logger {
fn enabled(&self, metadata: &LogMetadata) -> bool {
metadata.level() <= self.loglevel
}
fn log(&self, record: &LogRecord) {
if self.enabled(record.metadata()) {
let msg = format!("{}\t| {}\t| {}", record.level(), record.target(), record.args());
self.logfile.write_all(msg.as_bytes()).unwrap();
}
}
}
日志记录器的impl日志{
启用fn(&self,元数据:&LogMetadata)->bool{
metadata.level()每当你需要呈现一个不可变的接口,但在幕后进行变异时,你可以使用内部可变性。通常的方法是使用来自的某些东西。文档会调用以下特定用例: 因为你必须使用变异来实现一个最初被定义为采用的特质方法&self 具体来说,我会尝试在这种情况下使用 不幸的是,要求实现者也是
Sync+Send
,但单元格不是。这意味着我们需要升级到可以处理多个线程的功能。这就是:
extern板条箱日志;
使用std::fs::File;
使用std::io::Write;
使用std::sync::Mutex;
使用日志::{LogLevelFilter,LogMetadata,LogRecord,log};
发布结构文件记录器{
loglevel:LogLevelFilter,
日志文件:选项,
}
文件记录器的impl日志{
启用fn(&self,元数据:&LogMetadata)->bool{
metadata.level()注意:通常不需要在调用log
的线程中进行同步I/O,因此通常使用内部队列或缓冲区,并有一个专用的“使用者”线程负责写入文件。在生锈的世界中,可能是通道?
extern crate log;
use std::fs::File;
use std::io::Write;
use std::sync::Mutex;
use log::{LogLevelFilter,LogMetadata,LogRecord,Log};
pub struct FileLogger {
loglevel: LogLevelFilter,
logfile: Option<Mutex<File>>,
}
impl Log for FileLogger {
fn enabled(&self, metadata: &LogMetadata) -> bool {
metadata.level() <= self.loglevel
}
fn log(&self, record: &LogRecord) {
if self.enabled(record.metadata()) {
let msg = format!("{}\t| {}\t| {}", record.level(), record.target(), record.args());
self.logfile.as_ref().map(|f| {
f.lock().unwrap().write_all(msg.as_bytes()).unwrap()
});
}
}
}
#[test]
fn it_works() {
}