#事件日志 #Windows事件 #日志消息 #事件记录 #记录 #事件源 #发送消息

winlog2

一个简单的Rust日志后端,用于将消息发送到Windows事件日志

2个版本

0.3.1 2023年6月24日
0.3.0 2023年5月3日

#245 in Windows API

Download history 34/week @ 2024-03-11 39/week @ 2024-03-18 23/week @ 2024-03-25 94/week @ 2024-04-01 2/week @ 2024-04-08 24/week @ 2024-04-15 105/week @ 2024-04-22 32/week @ 2024-04-29 72/week @ 2024-05-06 387/week @ 2024-05-13 422/week @ 2024-05-20 273/week @ 2024-05-27 194/week @ 2024-06-03 77/week @ 2024-06-10 1/week @ 2024-06-17 14/week @ 2024-06-24

每月286次下载
用于 sediment-rs

MIT/Apache

14KB
131

winlog2

这是winlog的一个分支。

一个简单的Rust日志后端,用于将消息发送到Windows事件日志

特性

  • 使用RegisterEventSourceWReportEventW 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.rcMSG00409.bin 在源代码控制之下,因此用户不需要安装 mc.exe 即可进行标准构建。

测试

端到端测试需要在 HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application 注册表键上有“完全控制”权限。

cargotest

进程

  1. 创建一个唯一的临时事件源名称(winlog-test-###########)。
  2. 将我们的编译测试可执行文件注册为Windows注册表中的事件源 EventMessageFile。您可以在 HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\winlog-test-########### 中看到一个新键。
  3. 向事件源写入一些日志消息。
  4. 使用PowerShell检索已记录的消息。
  5. 断言检索到的日志消息是正确的。
  6. 注销我们的事件源。这将删除 winlog-test-########## 注册表键。

许可

根据您的选择,在以下许可证下授权:

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交用于包含在作品中的任何贡献,应以上述双许可方式发布,不附加任何额外条款或条件。

依赖项

~19-28MB
~380K SLoC