2个版本
0.3.1 | 2023年6月24日 |
---|---|
0.3.0 | 2023年5月3日 |
#245 in Windows API
每月286次下载
用于 sediment-rs
14KB
131 行
winlog2
这是winlog
的一个分支。
一个简单的Rust日志后端,用于将消息发送到Windows事件日志。
特性
- 使用RegisterEventSourceW和ReportEventW API将Rust日志消息写入Windows事件日志。
- 支持
env_logger
过滤,从RUST_LOG环境变量初始化。(可选) - 提供实用函数来注册/注销Windows注册表中的事件源。
- 在可执行文件中嵌入了一个小的(120字节)消息资源库,其中包含必要的日志消息模板。
Rust日志级别映射到Windows事件类型如下
Rust日志级别 | Windows事件类型 | Windows事件ID |
---|---|---|
错误 | 错误 | 1 |
警告 | 警告 | 2 |
信息 | 信息性 | 3 |
调试 | 信息性 | 4 |
跟踪 | 信息性 | 5 |
要求
- Windows或MinGW
- [Windows,可选] PowerShell(用于端到端测试)
使用方法
Cargo.toml
纯winlog
[dependencies]
log = "*"
winlog = "*"
或启用env_logger过滤支持
[dependencies]
log = "*"
winlog = { version = "0.2.5", features = ["env_logger"] }
在Windows中注册日志源
在Windows注册表中注册日志源
winlog::register("Example Log").unwrap();
这通常需要管理员
权限,因此通常在安装时完成。
如果您的MSI安装程序(或类似程序)注册了您的事件源,则不应调用此命令。
记录事件
不使用env_logger过滤
use log::{info, trace};
winlog::init("Example Log").unwrap();
info!("Hello, Event Log");
trace!("This will be logged too");
使用带env_logger过滤器的winlog后端
use log::{info, trace};
// # export RUST_LOG="info"
winlog::init("Example Log").unwrap();
info!("Hello, Event Log");
trace!("This will be filtered out");
注销日志源
注销日志源
winlog::deregister("Example Log").unwrap();
这通常在程序卸载时完成。如果您的MSI安装程序(或类似程序)注销了您的事件源,则不应调用此功能。
新功能
0.3.0
- 从原始仓库分叉。
- 使用
windows-sys
而不是winapi
。 - 更新其他依赖项。
- 生成
eventmsgs.rc
并使用winres
编译它。 - 修复
end-to-end
测试,即使在失败的情况下也能正确注销。 - 移除静默失败的API。
0.2.6
- 禁用不必要的正则表达式功能以加快构建速度。
- 在
build.rs
中改进错误报告/处理。
0.2.5
- 在Windows 10和Debian/MinGW上使用Gitlab CI进行构建。
- 可选支持env_logger事件(启用功能
env_logger
)。 - 在MinGW上始终运行
windrc/windrc
。 - 在
.cargo/config
中包含链接器配置。
构建
Windows
cargo build --release
MinGW
安装MinGW(Ubuntu)
sudo apt install mingw-w64
安装Rust
rustup target install x86_64-pc-windows-gnu
当前通过rustup安装不使用正确的链接器,因此您必须将以下内容添加到 .cargo/config
[target.x86_64-pc-windows-gnu]
linker = "/usr/bin/x86_64-w64-mingw32-gcc"
构建
cargo build --release
内部结构
工件 eventmsgs.rc
和 MSG00409.bin
在源代码控制之下,因此用户不需要安装 mc.exe
即可进行标准构建。
测试
端到端测试需要在 HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application
注册表键上有“完全控制”权限。
cargotest
进程
- 创建一个唯一的临时事件源名称(
winlog-test-###########
)。 - 将我们的编译测试可执行文件注册为Windows注册表中的事件源
EventMessageFile
。您可以在HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\winlog-test-###########
中看到一个新键。 - 向事件源写入一些日志消息。
- 使用PowerShell检索已记录的消息。
- 断言检索到的日志消息是正确的。
- 注销我们的事件源。这将删除
winlog-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许可证定义的,您有意提交用于包含在作品中的任何贡献,应以上述双许可方式发布,不附加任何额外条款或条件。
依赖项
~19-28MB
~380K SLoC