c# - 获取崩溃程序的事件日志的可能性
问题描述
我正在编写一个用于监视程序的工具。如果我正在监视的程序崩溃了,我想获取它崩溃的原因 Windows 事件日志错误。
目前我尝试获取最后 2 秒的所有事件日志,因为我的程序没有响应。但是当我尝试添加时间跨度时,过滤会给我一个错误。没有时间跨度它确实有效
错误:System.Diagnostics.Eventing.Reader.EventLogException 指定的查询无效。
DateTime now = DateTime.Now;
DateTime secondsearlier = now.AddSeconds(-2);
TimeSpan ts = now-secondsearlier;
Console.WriteLine("yuhu");
EventLogSession session;
session = new EventLogSession();
string filter = $"Select*[System[(Level = 1 or Level = 2) and TimeCreated[timediff(@SystemTime) & lt;= 3600000]]]";
string fidlter = $"*[System[(Level=1 or Level=2)]]";
var query = new EventLogQuery("Application", PathType.LogName, filter);
var reader = new EventLogReader(query);
EventRecord record;
// Console.WriteLine(reader.ReadEvent().ToString());
while ((record = reader.ReadEvent()) != null) {
using (record) {
try {
Console.WriteLine("{0} {1}: {2}", record.TimeCreated, record.LevelDisplayName, record.FormatDescription());
}
catch(Exception e) {
}
}
}
解决方案
一种简单的方法是计算开始和结束时间并将其用于查询:
var startTime = DateTime.Now.AddMinutes(-120);//Set here the time range you want to select
var endTime = DateTime.Now;
var query = $"*[System[(Level=1 or Level=2)]] and *[System[TimeCreated[@SystemTime >= '{startTime.ToUniversalTime():O}']]] and *[System[TimeCreated[@SystemTime <= '{endTime.ToUniversalTime():O}']]]";
var elq = new EventLogQuery("Application", PathType.LogName, query);
var reader = new EventLogReader(elq);
EventRecord record;
while ((record = reader.ReadEvent()) != null)
{
using (record)
{
try
{
Console.WriteLine("{0} {1}: {2}", record.TimeCreated, record.LevelDisplayName, record.FormatDescription());
}
catch (Exception e)
{
Console.WriteLine("ERROR: {0}", e.Message);
}
}
}
推荐阅读
- ruby-on-rails - Rails RecordNotFound 找不到带有 id 的专辑
- flutter - 从地图中获取地图列表的索引
- javascript - 我需要按日期过滤任务以显示在某个区域 - React Native
- node.js - 用于生产的免费 SMTP
- r - 在函数中设置默认值时遇到问题[r]
- python - 如何使用python获取json响应?
- css - 在灰度背景图像上将文本颜色从黑色“反转”为白色
- python - Python networkx边缘和节点标记问题
- java - 无法使用 java 中的 openchannel 访问远程机器中的 cmd 提示符
- python - 使用 np.repeat 将一维数组扩展为多维数组