我正在使用一个定期记录到 Windows 应用程序日志的应用程序(可通过事件查看器管理工具查看),并且我正在寻找一种每天备份它的方法。这很重要,因为我们有时会发现应用程序存在问题 - 为了进一步调查,我们需要一周前记录的信息。我们正在寻找的事件不一定仍然存在......我已经尝试增加大小和所有这些,但我认为自动备份会促进这个过程。我们最终不会得到巨大的日志,而是多个中等大小的日志。
我更喜欢像批处理文件 + Windows 调度程序这样的简单解决方案,但也会对其他方法感兴趣。
谢谢
我正在使用一个定期记录到 Windows 应用程序日志的应用程序(可通过事件查看器管理工具查看),并且我正在寻找一种每天备份它的方法。这很重要,因为我们有时会发现应用程序存在问题 - 为了进一步调查,我们需要一周前记录的信息。我们正在寻找的事件不一定仍然存在......我已经尝试增加大小和所有这些,但我认为自动备份会促进这个过程。我们最终不会得到巨大的日志,而是多个中等大小的日志。
我更喜欢像批处理文件 + Windows 调度程序这样的简单解决方案,但也会对其他方法感兴趣。
谢谢
您可以使用 Windows Management Instrumentation (WMI) 来读取事件日志并对结果执行任何您喜欢的操作。这是一篇文章,您可以根据自己的目的进行调整。
这是我不久前找到的一个 WMI 脚本。这可能就是您要搜索的内容!
dim strComputer = "." 'Define here the Remote IP Address or Computername
dim objWMIService
dim colLogFiles
dim objLogfile
dim errBackupLog
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Backup)}!\\" & strComputer & "\root\cimv2")
Call eventlogbackup("Application")
Call eventlogbackup("System")
Call eventlogbackup("Security")
Function eventlogbackup(logtype)
Set colLogFiles = objWMIService.ExecQuery ("SELECT * FROM Win32_NTEventLogFile WHERE LogFileName='" & logtype & "'")
For Each objLogfile in colLogFiles
errBackupLog = objLogFile.BackupEventLog("\\server\eventlogs\" & strComputer & "\" &logtype & ".evt")
If errBackupLog <> 0 Then
Wscript.Echo "The " & logtype &" event log could not be backed up."
Else
objLogFile.ClearEventLog()
Wscript.Echo "The " & logtype &" event log is backed up."
End If
Next
End Function
只需在计划任务中设置此脚本,您就可以开始了!
将 Application 通道中的所有事件输出到 XML:
wevtutil.exe qe application
对于可读的文本输出,使用:
wevtutil.exe qe application /f:text
您可以轻松地将这些输出中的任何一个定期通过管道传输到文件以进行备份。
您可能需要考虑设置一种工具来将 Windows 事件转发到 syslog 服务器。然后,不必运行执行备份的进程,您将几乎在将所有日志条目添加到 Windows 事件日志的同时将它们转发到第二个位置。
http://ntsyslog.sourceforge.net/ http://edoceo.com/creo/winlogd http://www.softpanorama.org/Logs/Syslog/syslog_for_windows.shtml
根据您使用的系统日志服务器,您可以设置过滤器以忽略某些事件或将它们发送到不同的文件。您可以随意设置日志滚动。