ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

C#如何将日志记录到 Windows事件日志中

2021-10-06 12:00:06  阅读:177  来源: 互联网

标签:string EventLog C# message Windows 日志 logger


每当出现一些未捕获异常时,操作系统都会将异常信息写入到 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事件日志  中是一个非常不错的选择。

标签:string,EventLog,C#,message,Windows,日志,logger
来源: https://www.cnblogs.com/cloveo/p/15370919.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有