[英]NodeJS - Logging to Windows Event Log?
我正在尝试编写一个Node应用程序,该应用程序一旦部署,将记录到Windows事件日志中。
当我使用命令行运行应用程序时,我浏览了可用的软件包,并能够成功使用节点窗口将日志写入Windows Event Viewer。 但是,当我使用pkg将应用程序转换为.exe文件并尝试运行.exe文件时,它不再登录到Windows事件日志中。
例如,我尝试编写如下基本应用程序:
const EventLogger = require('node-windows').EventLogger;
const log = new EventLogger('TestApp');
log.info('Test test test!', 1000)
如果我使用命令行(例如,节点index.js)运行此应用程序,它将记录到Windows Event Viewer。 但是,当我运行pkg将项目转换为可执行文件并尝试运行可执行文件(作为实例并使用Windows Task Scheduler)时,它不再注销。
我已经检查过以确保.exe以管理员身份运行,因此我认为这不是权限问题。 有人对为什么.exe可能未注销有任何想法吗? 是否有其他NPM软件包/库可提供登录Windows事件日志的功能?
先感谢您!
pkg将js源文件和其他资产打包到EXE中,并使用虚拟文件系统在节点进程中公开它们。 这对于大多数情况都可以正常工作,但是如果需要在流程之外使用这些资产中的任何一项,则会中断。
对于其大多数功能,node-windows模块分发一些自己的可执行文件或使用Windows内置函数。 它代表您exec()
那些EXE。
exec()
。 pkg很有可能打破了这一点; 您需要分发这些EXE并将它们自己放置在磁盘上。 eventcreate
,它应该可以工作,但是pkg可能child_process
虚拟文件系统做一些奇怪的事情,从而破坏了child_process
工作方式。 无论如何,我强烈建议不要使用节点窗口进行日志记录,因为exec()
是每个日志调用的新子进程。 这是非常低效的在Windows上:它必须产生一个壳(CMD.EXE),然后运行助手(eventcreate.exe),而在Windows进程创建是缓慢的。 痛苦的缓慢。
如果您开始记录足够的内容,您将很快通过流程簿记使整个系统崩溃。
而是使用直接调用ReportEvent
API的本机模块。 windows-eventlog符合此要求。
您还需要考虑pkg关于本机模块的注释 。
支持使用本机插件(
.node
文件),但尚未解析将.node
文件打包在可执行文件中。 您必须将项目使用的本机加载项部署到与可执行文件相同的目录中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.