每当出现一些未捕获异常时,操作系统都会将异常信息写入到 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/article/3598750/how-to-log-data-to-the-windows-event-log-in-csharp.html

windows log日志分割_如何将日志记录到 Windows事件日志 中相关推荐

  1. 如何设计日志系统_架构 - 如何设计一个百亿级日志系统

    " 日志是记录系统中各种问题信息的关键,也是一种常见的海量数据. 日志平台为集团所有业务系统提供日志采集.消费.分析.存储.索引和查询的一站式日志服务. 主要为了解决日志分散不方便查看.日志 ...

  2. logback修改日志内容_巧用maven profile动态修改logback日志目录

    在使用logback时,每次部署的时候,都需要手动修改logback-spring.xml,把日志目录调整到对应线上的,部署完之后,再调整到本地的目录.感觉这样太笨拙了,本着提高生产力的思想,耗时两个 ...

  3. java查看日志命令_[Java教程]【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...

    [Java教程][Linux]linux查看日志文件内容命令tail.cat.tac.head.echo 0 2017-11-14 12:00:29 linux查看日志文件内容命令tail.cat.t ...

  4. cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统

    任何复杂的应用程序偶尔都会出现错误.在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况.要获取系统的整体视图,日志记录和监控至关重要.在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上 ...

  5. windows共享文件夹端口_探讨横向渗透背后的Windows安全机制

    1.测试环境 god.org域环境: 系统 身份 IP地址 win2008 域控 192.168.124.21 win7 普通域成员 192.168.124.25 win2003 普通域成员 192. ...

  6. python windows程序管理器_获取使用python运行的windows应用程序的列表

    您可以使用powershell而不是WMIC来获得所需的应用程序列表:import subprocess cmd = 'powershell "gps | where {$_.MainWin ...

  7. windows 显示苹果分区_基准测试数据显示苹果M1运行Windows的表现比微软自家硬件好上近一倍...

    根据最新的基准测试,苹果M1运行 "Windows 10 on ARM "的速度比微软自家的硬件快了近2倍.更新后的基准数据显示,苹果M1上的Windows 10比Surface ...

  8. 开启系统事件监视服务器,Windows 系统事件日志监视软件和日志收集器 | SolarWinds...

    什么是 Windows 事件日志? Windows 事件日志是 Microsoft 系统中事务的记录.网络中的所有设备和服务都生成日志,其中包括错误和问题报告,以及成功的事务和交互记录.Windows ...

  9. windows终端事件日志监控指南

    windows事件监控指南 推荐收集的活动日志 账户使用情况 收集和审核用户帐户信息. 跟踪本地帐户使用情况有助于安全分析人员检测传递哈希活动和其他未经授权的帐户使用情况. 还可以跟踪其他信息,例如远 ...

最新文章

  1. 理解java和python类变量以及类的成员变量
  2. history的详解与使用
  3. thinkphp中的AJAX返回ajaxReturn()
  4. mac 怎么创建php文件夹权限设置密码,Mac文件权限管理(shell命令)
  5. Docker 升级 npm v3 报错 cross-device link not permitted, rename
  6. 怎么打包图片_超简单的免费批量图片压缩技巧,只需3步
  7. 嵌入式指针embedded pointer的概念以及用法
  8. git git 查看远程库_如何从Git远程存储库中提取
  9. Vue自定义组件数组型双向绑定
  10. DISPLAY变量和xhost(原创)
  11. java 动态转换器_非常简单的Java动态转换
  12. 云账房签约葡萄城,开启 “在线Excel+智能财税” 时代
  13. java程序员待遇怎么样_上海海文告诉你Java程序员工资待遇到底如何
  14. URP实现毛玻璃效果一
  15. react 在JXL中嵌入JS表达式
  16. Android中的EditText输入银行卡号四位空一格
  17. 厦门商业贷款转公积金攻略
  18. 电脑桌面计算机打开很慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...
  19. C语言——整数各位数字求和
  20. js报错- cannot set property xxx of undefined

热门文章

  1. 1月28日云栖精选夜读 | 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
  2. Sencha ID的注册
  3. 分配的访问权限的展台应用:最佳做法
  4. Powershell命令中的 CommonParameters是指什么
  5. 生成GUID唯一值的方法汇总(dotnet/javascript/sqlserver)
  6. mybatis错误之配置文件属性配置问题
  7. mongodb集群与分片的配置说明
  8. iphone3G恢复到3.1.2遇到的问题
  9. vs.net 2005 beta 2安装问题
  10. NandFlash详述