7个版本 (稳定版)
1.2.2 | 2024年5月20日 |
---|---|
1.2.1 | 2023年6月30日 |
1.2.0 | 2023年5月24日 |
1.1.0 | 2023年3月25日 |
0.1.0 | 2022年9月13日 |
#264 在 Windows API
每月194 次下载
用于 opentelemetry-etw-logs
225KB
2.5K SLoC
TraceLogging Dynamic for Rust
tracelogging_dynamic
包提供了一种在编译时未知事件模式的情况下记录TraceLogging事件的途径。
与tracelogging
包中的实现相比,此实现不太友好,且运行时成本更高。仅在无法提前确定要记录的事件集时才应使用此实现。例如,当实现一个中间层库,该库为动态上层提供通用日志功能时,这可能很有用。
use tracelogging_dynamic as tld;
// Pinning is required because the register() method sets up a callback with ETW.
let provider =
Box::pin(tld::Provider::new("MyCompany.MyComponent", &tld::Provider::options()));
// Register the provider. If you don't register (or if register fails) then enabled()
// will always return false and write() will be a no-op.
unsafe {
provider.as_ref().register();
}
// If provider is not enabled for a given level + keyword, the write() call will do
// nothing. Check enabled(level, keyword) before building the event so we don't waste
// time on an event that nobody will receive.
let my_event_level = tld::Level::Verbose; // Severity level.
let my_event_keyword = 0x123; // User-defined category bits.
if provider.enabled(my_event_level, my_event_keyword) {
let field1_value = "FieldValue";
let field2_value = b'A';
// Create and write an event with two fields:
tld::EventBuilder::new()
// Most events specify 0 for event tag.
.reset("MyEventName", my_event_level, my_event_keyword, 0)
// Most fields use Default for event format and 0 for field tag.
.add_str8("FieldName1", field1_value, tld::OutType::Default, 0)
.add_u8("FieldName2", field2_value, tld::OutType::String, 0)
// If activity_id is None, event uses the current thread's activity.
// If related_id is None, event will not have a related activity.
.write(&provider, None, None);
}
配置
此包支持以下可配置功能
etw
:使用Windows ETW API记录事件。如果未启用,所有日志操作都将不执行。 默认启用。
此外,此包只有在编译为Windows操作系统时才会记录事件。如果编译为非Windows操作系统,所有日志操作都将不执行。