6个版本
0.2.2 | 2023年2月18日 |
---|---|
0.2.1 | 2023年2月17日 |
0.1.1 | 2021年10月31日 |
0.1.0 | 2020年6月25日 |
0.0.0 | 2020年6月25日 |
#165 在 调试 中排名
每月2,014次下载
用于 4 个Crate(3个直接使用)
17KB
250 行
eventlog
Windows事件日志API的log兼容包装器。
感谢Jeroen C. van Gelderen创建了winlog项目,该项目为此分支提供了代码。
特性
- 使用RegisterEventSourceW和ReportEventW API将Rust日志消息写入Windows事件日志。
- 提供实用函数以在Windows注册表中注册/注销您的事件源。
- 嵌入一个包含必要日志消息模板的小型(120字节)消息资源库到您的可执行文件中。
- 不会panic。
将五个Rust日志级别映射到以下Windows事件类型
Rust日志级别 | Windows事件类型 | Windows事件ID |
---|---|---|
错误 | 错误 | 1 |
警告 | 警告 | 2 |
信息 | 信息性 | 3 |
调试 | 信息性 | 4 |
跟踪 | 信息性 | 5 |
需求
- Rust 1.29+ on Windows with MSVC toolchain
- [Windows,可选] mc.exe和rc.exe(仅在更改
eventmsgs.mc
时需要) - [Windows,可选] PowerShell(用于端到端测试)
使用方法
Cargo.toml
[dependencies]
eventlog = "0.1.0"
在Windows中注册日志源
在Windows注册表中注册日志源
eventlog::register("Example Log").unwrap();
这通常需要管理员权限,因此通常在安装时完成。
如果您的MSI安装程序(或类似程序)注册了您的事件源,则不应调用此操作。
记录事件
eventlog::init("Example Log", log::Level::Trace).unwrap();
info!("Hello, Event Log");
trace!("This will be logged too");
注销日志源
注销日志源
eventlog::deregister("Example Log").unwrap();
这通常在程序卸载期间完成。如果您的MSI安装程序(或类似程序)注销了您的事件源,则不应调用此操作。
内部结构
工件eventmsgs.lib
和eventmsgs.rs
受源代码控制,因此用户不需要安装mc.exe
和rc.exe
即可进行标准构建。
- 如果
build.rs
确定eventmsgs.mc
已更改,则build.rs
- 调用
mc.exe
(这将创建eventmsgs.h
) - 调用
rc.exe
(这将创建eventmsgs.lib
) - 从
eventmsgs.h
创建eventmsgs.rs
。
- 调用
build.rs
发出链接器标志,以便可以找到eventmsgs.lib
。- 标准
cargo build
随后。
测试
端到端测试需要对HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application
注册表键的“完全控制”权限。
cargo test
过程
- 创建一个唯一的临时事件源名称(
eventlog-test-###########
)。 - 将编译后的测试可执行文件注册为Windows注册表中事件源的
EventMessageFile
。您可以在HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\eventlog-test-###########
中看到新键。 - 向事件源写入一些日志消息。
- 使用PowerShell检索已记录的消息。
- 注销我们的事件源。这将删除
eventlog-test-##########
注册表键。 - 断言检索到的日志消息是正确的。
许可协议
根据您的选择,许可协议可以是以下之一
- Apache License,版本2.0(LICENSE-APACHE或http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可协议(LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可协议中定义的,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~0.6-1.8MB
~33K SLoC