**日志(**日志可以删除吗)
每当出现一些未捕获异常时,*作系统都会将异常信息写入到 Windows **日志 中,可以通过 Windows **查看器 查看,如下图:
这篇文章将会讨论如何使用编程的方式将日志记录到 Windows **日志 中。
安装 EventLog要想在 .NET Core 中记录数据到 Windows **日志中,可以用 Nuget 安装一下Microsoft.Extensions.Logging.EventLog 包,用 Visual Studio 中的 NuGet Package Manager 可视化面板 或者 使用 NuGet Package Manager Console 命令行界面都可以,输入命令如下:
Install-Package Microsoft.Extensions.Logging.EventLog通过 EventLog 记录日志
要想将日志写入 Windows **日志中,可以使用如下代码:
EventLog eventLog = new EventLog();eventLog.Source = "MyEventLogTarget";eventLog.WriteEntry("This is a test message.", EventLogEntryType.Information);通过 EventLog 清空日志
为了能够实现清空所有 windows 日志,可以使用如下代码:
EventLog eventLog = new EventLog();eventLog.Source = "MyEventLogSource";eventLog.Clear();
Clear 是清空所有的 windows **日志,那如何清除某一个类别的日志呢? 比如说:MyEventLogTarget,修改代码如下:
if (EventLog.Exists("MyEventLogTarget")){ EventLog.Delete("MyEventLogTarget");}读取 Windows **日志 记录
可以使用 foreach 迭代 Entries 来获取所有的日志记录。
EventLog eventLog = new EventLog();eventLog.Log = "MyEventLogTarget";foreach (EventLogEntry entry in eventLog.Entries){ //Write your custom code here}使用 NLog 将日志记录到 Windows **日志 中
要想使用 NLog 将日志记录到 windows**日志 中,你需要用 NuGet 安装一下 NLog.WindowsEventLog ,这个包封装了连接 EventLog 错综复杂的细节,所以你只需要像平时用 NLog 一样的*作即可。
创建 ILogManager 接口下面的接口方法用于记录不同级别的日志 (information, warning, debug, or error)
public interface ILogManager { void LogInformation(string message); void LogWarning(string message); void LogDebug(string message); void LogError(string message); }创建 NLogManager 类
接下来,从 ILogManager 接口上派生一个 NLogManager 类,代码如下:
public class NLogManager : ILogManager { private static NLog.ILogger logger = LogManager.GetCurrentClassLogger(); public void LogDebug(string message) { throw new NotImplementedException(); } public void LogError(string message) { logger.Error(message); } public void LogInformation(string message) { throw new NotImplementedException(); } public void LogWarning(string message) { throw new NotImplementedException(); } }使用 LogError 方法
为了简单起见,我就仅实现 LogError 方法,其他的三个方法大家可以自行实现,为了能够了解如何通过 NLog 记录日志到 Windows**日志 中,修改代码如下:
public void LogError(string message) { Logger logger = LogManager.GetLogger("EventLogTarget"); var logEventInfo = new LogEventInfo(LogLevel.Error,logger.Name, message); logger.Log(logEventInfo); }
请注意,上面我创建了一个名为 EventLogTarget 的 EventLog,然后在 LogEventInfo 的构造函数中传递 log级别,logger的名字 以及 需要记录的 log 信息。
配置 Nlog 将日志记录到 Windows**日志 中为了能够配置 Nlog 以编程的方式 通过 EventLog 记录日志,可以使用如下代码。
var config = new NLog.Config.LoggingConfiguration();var logEventLog = new NLog.Targets.EventLogTarget("EventLogTarget");config.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Error, logEventLog);NLog.LogManager.Configuration = config;完整的 NLogManager 例子
以下是 NLogManager 的完整代码实例,可供大家参考。
public class NLogManager : ILogManager { private static NLog.ILogger logger =LogManager.GetCurrentClassLogger(); public void LogDebug(string message) { logger.Debug(message); } public void LogError(string message) { Logger logger = LogManager.GetLogger("EventLogTarget"); var logEventInfo = new LogEventInfo(LogLevel.Error,logger.Name, message); logger.Log(logEventInfo); } public void LogInformation(string message) { logger.Info(message); } public void LogWarning(string message) { logger.Warn(message); } }
为了能够在 Controller 中使用 NLogManager,还需要在 Startup 下的 ConfigureServices 方法中进行注入,代码如下:
services.AddSingleton<ILogManager, NLogManager>();
当你打开 Windows **查看器,就会看到错误信息已成功记录到这里了,参考如下截图:
Windows**日志 通常用于记录 系统**,网络流量和诸如安全,性能相关的信息 等等,你也可以将应用程序的日志记录到 Windows**日志中,通常来说,如果你的程序仅仅是跑在 windows 上,那么将应用程序信息记录到 Windows**日志 中是一个非常不错的选择。
译文链接:https://.infoworld./article/3598750/how-to-log-data-to-the-windows-event-log-in-csharp.html