我有一个应用。我尝试在Windows Event Viewer
崩溃时写日志。我发现了Write to Windows Application Event Log,并且正在使用DispatcherUnhandledExceptionEventHandler
来捕获未处理的异常。我在应用的构造函数中设置它,例如:
DispatcherUnhandledException += MyApplication_DispatcherUnhandledException;
并这样写日志:
using (EventLog eventLog = new EventLog("Application"))
{
eventLog.Source = "Application";
eventLog.WriteEntry(exceptionMessage, EventLogEntryType.Error);
}
创建日志,但是在Run
的{{1}}方法中发生另一个异常,并且Windows在事件查看器中使用另一个ID,源添加了此错误。
System.Windows.Application
异常信息:System.Exception 在ServerApp.MainWindow..ctor()
异常信息:System.Windows.Markup.XamlParseException 在System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader,System.Xaml.IXamlObjectWriterFactory,布尔值,System.Object,System.Xaml.XamlObjectWriterSettings,System.Uri)中 在System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader,布尔值,System.Object,System.Xaml.Permissions.XamlAccessLevel,System.Uri) 在System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream,System.Windows.Markup.ParserContext,System.Object,布尔值) 在System.Windows.Application.LoadBamlStreamWithSyncInfo(System.IO.Stream,System.Windows.Markup.ParserContext) 在System.Windows.Application.LoadComponent(System.Uri,布尔) 在System.Windows.Application.DoStartup()
如何只写我的登录事件查看器?
答案 0 :(得分:3)
using System;
using System.Diagnostics;
...
...
public void WriteToEventLog(EventLogEntryType eventLogType, string message, string logSourceName)
{
if (!EventLog.SourceExists(logSourceName))
{
EventLog.CreateEventSource(logSourceName, "Application");
}
using (var eventLog = new EventLog { Source = logSourceName })
{
const int maxLength = 31000;
if (message.Length > maxLength)
{
message = message.Substring(0, maxLength);
}
eventLog.WriteEntry(message, eventLogType);
}
}
要使用此应用程序运行帐户的用户必须具有访问权限才能创建日志。
祝你好运。
答案 1 :(得分:0)