- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我取消注释 create_log
,log
和 LOG
都会打印在控制台上。没有它,什么也不会打印。这是怎么回事?
#[macro_use]
extern crate slog;
extern crate slog_term;
extern crate slog_async;
#[macro_use]
extern crate lazy_static;
use slog::Drain;
lazy_static! {
static ref LOG: slog::Logger = create_log();
}
fn create_log() -> slog::Logger {
let decorator = slog_term::TermDecorator::new().force_plain().build();
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
let drain = slog_async::Async::new(drain).build().fuse();
slog::Logger::root(drain, o!())
}
fn main() {
info!(LOG, "LOG"); // NOT printed unless next line is uncommented
// let log = create_log(); // enables printing both log and LOG
// info!(log, "log");
}
最佳答案
通过使用 slog-async,you have opted into :
slog-async allows building
Drain
s that offload processing to another thread. Typically serialization and IO operations can be slow enough that they could make logging hinder performance of the main code. Sending logging records to another thread is much faster (ballpark of 100ns).
您的代码注册一个日志事件,该事件将被发送到另一个线程,然后立即退出。后台线程没有时间实际记录。
但是,通过在程序结束时休眠,它“有效”:
std::thread::sleep_ms(1000);
为什么另一种情况有效?同样,我们 turn to the docs ,强调我的:
When using
std::process::exit
to terminate a process with an exit code it is imporant to notice that destructors will not be called. This matters for slog_async as it will prevents flushing of the async drain and discarding messages that are not yet written.
惰性静态中的项目 do not have their destructors run (他们什么时候会,如果它的目的是永远活着)。
当您从 main
函数构造另一个记录器时,它被分配在堆栈上并将被删除。这会导致先前的日志消息也被刷新。
关于rust - 为什么在使用非静态记录器之前不打印 lazy_static slog::Logger?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47342036/
我使用 lazy_static 在内存中保存一个 HashMap。我使用两种方法添加和获取元素,但我在生命周期方面遇到了一些问题。 这是我的代码: #[macro_use] extern crate
我正在尝试使用递归公用表表达式(大约80行SELECT语句)集成一个相当复杂的SQL查询。有两个不同的查询可以为递归设置种子。我不想在我的代码中嵌入两个不同的80行SQL语句,它们之间只有一行不同,谢
#[derive(Serialize)] pub struct SLPInfoVersion { name: String, protocol: i32 } impl SLPInfoV
我尝试创建一个 HashMap 并将函数作为值: #[macro_use] extern crate lazy_static; use std::collections::HashMap; lazy_
我有一个大项目,我在其中使用 lazy_static 创建一个 singleton。我认为 lazy_static crate 中存在错误(仅出现在大型项目中)或者我做错了什么,因为必须调用一次以创建
如果我取消注释 create_log,log 和 LOG 都会打印在控制台上。没有它,什么也不会打印。这是怎么回事? #[macro_use] extern crate slog; extern cr
我是 Rust 的新手。我正在将 mongodb 与异步运行时(tokio)一起使用。 我想全局初始化 mongo 客户端,所以我使用了一个名为 lazy_static 的 crate .问题是mon
我正在尝试使用 lazy_static crate 初始化一些静态变量,这些变量通过读取 build.rs 中的一些环境变量来赋值。我想要实现的类似于 this post . 我的代码如下: lazy
我想将一些 json 读入静态 HashMap ,并且正在使用 lazy_static和 serde ,但我不知道如何(如果有的话)解决这个 serde终身问题: #[macro_use] exter
这个问题在这里已经有了答案: Why does a lazy-static value claim to not implement a trait that it clearly implemen
我想分享一个 evmap ,一个无锁的、最终一致的、并发的多值映射,跨 Rust 程序中的所有线程。 天真地,它看起来像这样: #[macro_use] extern crate lazy_stati
这个问题在这里已经有了答案: Trying to return reference from RwLock, "borrowed value does not live long enough" E
我正在使用模拟函数编写测试,使用 Mutex 控制测试之间的返回值: #[macro_use] extern crate lazy_static; #[cfg(test)] pub use mock:
这段代码: #[macro_use] extern crate lazy_static; extern crate mysql; use mysql::*; fn some_fn() { la
我正在使用 Rust,为了方便起见,我想使用一个全局可变的 HashMap。然而,虽然可以使用 lazy_static 和 Mutex 定义一个全局的、可变的 HashMap,但是对于我的 Strin
我是一名优秀的程序员,十分优秀!