您当前的位置:首页 > 美文欣赏 > 内容

事件日志(事件日志可以删除吗)

事件日志(事件日志可以删除吗)

每当出现一些未捕获异常时,操作系统都会将异常信息写入到Windows 事件日志中,可以通过Windows 事件查看器查看,如下图:

这篇文章将会讨论如何使用编程的方式将日志记录到 Windows 事件日志 中。

安装 EventLog

要想在 .NET Core 中记录数据到 Windows 事件日志中,可以用 Nuget 安装一下Microsoft.Extensions.Logging.EventLog包,用 Visual Studio 中的NuGet Package Manager可视化面板 或者 使用NuGet Package Manager Console命令行界面都可以,输入命令如下:

Install-PackageMicrosoft.Extensions.Logging.EventLog
通过 EventLog 记录日志

要想将日志写入 Windows 事件日志中,可以使用如下代码:

EventLogeventLog=newEventLog();eventLog.Source="MyEventLogTarget";eventLog.WriteEntry("Thisisatestmessage.",EventLogEntryType.Information);
通过 EventLog 清空日志

为了能够实现清空所有 windows 日志,可以使用如下代码:

EventLogeventLog=newEventLog();eventLog.Source="MyEventLogSource";eventLog.Clear();

Clear 是清空所有的 windows 事件日志,那如何清除某一个类别的日志呢? 比如说:MyEventLogTarget,修改代码如下:

if(EventLog.Exists("MyEventLogTarget")){EventLog.Delete("MyEventLogTarget");}
读取 Windows 事件日志 记录

可以使用 foreach 迭代 Entries 来获取所有的日志记录。

EventLogeventLog=newEventLog();eventLog.Log="MyEventLogTarget";foreach(EventLogEntryentryineventLog.Entries){//Writeyourcustomcodehere}
使用 NLog 将日志记录到 Windows 事件日志 中

要想使用 NLog 将日志记录到 windows事件日志 中,你需要用 NuGet 安装一下NLog.WindowsEventLog,这个包封装了连接 EventLog 错综复杂的细节,所以你只需要像平时用 NLog 一样的操作即可。

创建 ILogManager 接口

下面的接口方法用于记录不同级别的日志 (information, warning, debug, or error)

publicinterfaceILogManager{voidLogInformation(stringmessage);voidLogWarning(stringmessage);voidLogDebug(stringmessage);voidLogError(stringmessage);}
创建 NLogManager 类

接下来,从 ILogManager 接口上派生一个 NLogManager 类,代码如下:

publicclassNLogManager:ILogManager{privatestaticNLog.ILoggerlogger=LogManager.GetCurrentClassLogger();publicvoidLogDebug(stringmessage){thrownewNotImplementedException();}publicvoidLogError(stringmessage){logger.Error(message);}publicvoidLogInformation(stringmessage){thrownewNotImplementedException();}publicvoidLogWarning(stringmessage){thrownewNotImplementedException();}}
使用 LogError 方法

为了简单起见,我就仅实现 LogError 方法,其他的三个方法大家可以自行实现,为了能够了解如何通过 NLog 记录日志到 Windows事件日志 中,修改代码如下:

publicvoidLogError(stringmessage){Loggerlogger=LogManager.GetLogger("EventLogTarget");varlogEventInfo=newLogEventInfo(LogLevel.Error,logger.Name,message);logger.Log(logEventInfo);}

请注意,上面我创建了一个名为EventLogTarget的 EventLog,然后在 LogEventInfo 的构造函数中传递 log级别,logger的名字 以及 需要记录的 log 信息。

配置 Nlog 将日志记录到 Windows事件日志 中

为了能够配置 Nlog 以编程的方式 通过 EventLog 记录日志,可以使用如下代码。

varconfig=newNLog.Config.LoggingConfiguration();varlogEventLog=newNLog.Targets.EventLogTarget("EventLogTarget");config.AddRule(NLog.LogLevel.Info,NLog.LogLevel.Error,logEventLog);NLog.LogManager.Configuration=config;
完整的 NLogManager 例子

以下是 NLogManager 的完整代码实例,可供大家参考。

publicclassNLogManager:ILogManager{privatestaticNLog.ILoggerlogger=LogManager.GetCurrentClassLogger();publicvoidLogDebug(stringmessage){logger.Debug(message);}publicvoidLogError(stringmessage){Loggerlogger=LogManager.GetLogger("EventLogTarget");varlogEventInfo=newLogEventInfo(LogLevel.Error,logger.Name,message);logger.Log(logEventInfo);}publicvoidLogInformation(stringmessage){logger.Info(message);}publicvoidLogWarning(stringmessage){logger.Warn(message);}}

为了能够在 Controller 中使用 NLogManager,还需要在 Startup 下的 ConfigureServices 方法中进行注入,代码如下:

services.AddSingleton<ILogManager,NLogManager>();

当你打开 Windows 事件查看器,就会看到错误信息已成功记录到这里了,参考如下截图:

Windows事件日志 通常用于记录 系统事件,网络流量和诸如安全,性能相关的信息 等等,你也可以将应用程序的日志记录到 Windows事件日志中,通常来说,如果你的程序仅仅是跑在 windows 上,那么将应用程序信息记录到 Windows事件日志 中是一个非常不错的选择。

译文链接:https://www.infoworld.com/article/3598750/how-to-log-data-to-the-windows-event-log-in-csharp.html


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 尊老爱老(尊老爱幼传统美德句子)

下一篇: 新食品安全法(2021年最新食品安全法)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号