乐趣区

关于.net:如何将日志记录到-Windows事件日志-中

每当呈现一些未捕捉异样时,操作系统都会将异样信息写入到 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://www.infoworld.com/art…

退出移动版