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日

#264Windows API

Download history 77/week @ 2024-04-13 7/week @ 2024-04-20 129/week @ 2024-05-11 237/week @ 2024-05-18 44/week @ 2024-05-25 44/week @ 2024-06-01 8/week @ 2024-06-08 78/week @ 2024-06-15 34/week @ 2024-06-22 2/week @ 2024-06-29 119/week @ 2024-07-13 18/week @ 2024-07-20 57/week @ 2024-07-27

每月194 次下载
用于 opentelemetry-etw-logs

MIT 许可证

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操作系统,所有日志操作都将不执行。

依赖项