NET编程实现对Windows事件日志的操作

合集下载

Windows cmd 中的事件查看与日志记录技巧

Windows cmd 中的事件查看与日志记录技巧

Windows cmd 中的事件查看与日志记录技巧Windows 操作系统是广泛使用的操作系统之一,而命令提示符(cmd)是Windows 系统中强大且常用的工具之一。

在日常使用中,我们经常需要查看系统事件和记录日志,以便及时发现问题并进行相应的处理。

本文将介绍一些Windows cmd 中的事件查看与日志记录技巧,帮助读者更好地利用这一工具。

一、查看系统事件1. 查看系统启动时间在命令提示符中输入“systeminfo | findstr /C:"System Boot Time"”,即可查看系统的启动时间。

这对于了解系统的运行情况和排查问题非常有帮助。

2. 查看系统错误日志输入“eventvwr”命令,打开事件查看器,可以查看系统的错误日志。

在左侧的面板中,可以选择不同的日志类型,如应用程序、安全性、系统等。

通过查看这些日志,我们可以了解系统的异常情况,例如应用程序崩溃、安全事件等。

3. 查看网络连接输入“netstat”命令,可以查看当前系统的网络连接情况。

通过查看网络连接,我们可以了解系统与外部设备或服务器的连接状态,以及相关端口的使用情况。

这对于网络故障排查和安全性管理非常重要。

二、日志记录技巧1. 输出命令结果到文件在命令提示符中,我们可以使用“>”符号将命令的输出结果保存到文件中。

例如,输入“ipconfig > C:\ipconfig.txt”,即可将 ipconfig 命令的结果保存到 C 盘下的ipconfig.txt 文件中。

这对于保存命令输出结果、进行后续分析和排查问题非常有用。

2. 创建自定义日志文件通过使用“echo”命令和“>>”符号,我们可以创建自定义的日志文件并将内容写入其中。

例如,输入“echo %DATE% %TIME%: This is a log message >> C:\log.txt”,即可将当前日期、时间以及自定义的日志信息写入 C 盘下的 log.txt 文件中。

windows服务20741

windows服务20741

用.Net开发Windows服务初探1 什么是Windows服务Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。

它没有用户界面,并且也不会产生任何可视输出。

任何用户消息都会被写进Windows事件日志。

计算机启动时,服务会自动开始运行。

它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。

通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。

2 创建一个Windows服务我们即将创建的这个服务是用来监视文件是否被改动的,只要指定的目录下的文件被改动,都会记入日志的。

下面就让我们来创建这个Windows服务。

Visual Studio .NET能够使创建一个Windows服务变成相当简单的一件事情。

(1)打开Visual (2)新建一个Windows服务项目,选取“Visual C#”项目,然后在选取Windows服务模板(3)将项目名称设置为WatchFileService单击确定(4)将Service1.cs重命名为WatchFile.cs(5)转到WatchFile.cs的设计画面,设置属性窗口中的ServiceName属性为WatchFileService,并从工具——〉组件中拖放FileSystemWatcher和EventLog到设计画面,拖放后的结果,如图:(6)设置fileSystemWatcher1的Filter属性为*.txt,Path属性为c:\temp(7)设置eventLog1的source属性为fileSystem-Watcher1(8)双击fileSystemWatcher1,添加如下代码:private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystem EventArgs e){eventLog1.WriteEntry( + " 这个文件在:"+DateTime.Now.ToString() + “被改动了!”);}3 使用Installer类(1)将WatchFile.cs切换到设计画面,在WatchFile的属性窗口下方按下“添加安装程序”选项。

.net 日志记录方法

.net 日志记录方法

在.NET 中,有几种常见的日志记录方法:1.使用System.Diagnostics.Trace类:这是.NET中最简单的日志记录方式,可以用于记录应用程序的运行情况。

Trace类提供了一种静态方法,可以全局地记录应用程序的执行过程。

你只需要在你的代码中添加Trace.WriteLine()方法即可。

这种方法的使用非常简单,但功能比较有限。

示例:csharp复制代码Trace.WriteLine("This is a log message");1.使用System.Runtime.Logger类:这是.NET Core中推荐使用的日志记录方式。

Logger类提供了一种更加灵活和强大的日志记录方式,可以配置不同的日志输出目标,例如控制台、文件、甚至是数据库。

示例:csharp复制代码using System.Runtime.Logging;public class Program{private static readonly ILogger<Program> _logger;static Program(){_logger = LogManager.GetLogger<Program>();}public static void Main(){_logger.LogInformation("This is a log message");}}1.使用第三方日志库:有许多第三方日志库可供选择,如Log4Net、NLog、Serilog 等。

这些库提供了更多的功能和灵活性,例如日志级别、日志旋转、异步日志等。

你可以根据你的需求选择适合的库。

2.使用ILogger接口:在 Core中,我们通常使用ILogger接口来记录日志。

ILogger接口是Microsoft.Extensions.Logging命名空间的一部分,它提供了一种可插拔的日志记录方式。

Windows事件日志的监视

Windows事件日志的监视

Windows事件日志的监视在应用程序中监视Windows事件日志是防止目前网络上的病毒等不安全因素的一个方法。

那么,如何来实现呢?下面我们来看看如何用托管C++监视Windows事件日志吧。

用 .NET EventLog进行监视文中的代码使用了 .NET 1.0/1.1托管C++语法,如果你在使用一个更高版本的 .NET,需要在工程属性对话框中设置/clr:oldSyntax编译选项,或调整以下代码使之符合新的托管语法。

用于Windows事件日志的关键 .NET类型是Diagnostics::EventLog类。

1、定义一个托管类并实现事件日志通知处理程序处理程序(OnNewLogEntry)会在"新事件日志项"事件引发时调用,同时,请注意此处的EntryWrittenEventHandler,以下是示例代码://用于监视新事件日志项的示例代码__gc class NewLogEntryEventHandler{public:NewLogEntryEventHandler() {}public:void OnNewLogEntry(Object* sender, EntryWrittenEventArgs* e){//获取并处理最近创建的项EventLogEntry* entry = e->Entry;}};2、实例化一个EventLog对象,并把它的 EnableRaisingEvents属性设为true属性EventLog::EnableRaisingEvents是一个布尔类型,其控制了在项目添加到EventLog对象指定的日志时,是否引发事件:EventLog* log = new EventLog("Application");log->EnableRaisingEvents = true;3、把事件处理程序连接到"新事件日志项"事件首先,实例化定义了事件处理程序的对象(在此例中为NewLogEntryEventHandler),接着,把事件方法(OnNewLogEntry)添加到EventLog::EntryWritten的事件处理程序列表中:NewLogEntryEventHandler* handler = new NewLogEntryEventHandler();log->EntryWritten +=newEntryWrittenEventHandler( handler,&NewLogEntryEventHandler::OnNewLogE ntry);4、为特定事件的处理编写代码回过头来看一个OnNewLogEntry方法,可以看到传递给事件处理程序的EntryWrittenEventArgs对象有一个名为EventLogEntry的成员,其包含了有关记录项目的详细情况,具体为以下属性:•MachineName--创建事件日志的电脑系统名。

C#日志类,实用.net日志操作类

C#日志类,实用.net日志操作类

C#日志类,实用.net日志操作类不管是Web应用还是Windows Forms 应用,系统日志我们都经常用到。

日志可以帮助我们跟踪监视系统的运行状况,及时发现错误,输出调式信息等。

记录日志的方法很多,比如用文本文件、XML文件、数据库等。

而用文本文件记录日志是最常用的方法之一。

这里就是一个用文本文件记录日志的简单实用的日志类,它有如下几个特点:1)按日期每天生产不同日志文件,方便按照日期来查找日志。

2)按日志类型生产不同的文件,比如跟踪信息、警告信息、错误信息用不同的日志文件来记录;方便我们查找指定类型的日志。

3)可以指定保持日志文件文件夹,如果不指定日志文件夹,Web应用保持到Bin文件夹,Windows Forms应用保持到.EXE文件所在的文件夹。

4)可以指定日志文件的前缀。

public class LogManager{private static string logPath = string.Empty;/// <summary>/// 保存日志的文件夹/// </summary>public static string LogPath{get{if (logPath == string.Empty){if (System.Web.HttpContext.Current == null)// Windows Forms 应用logPath = AppDomain.CurrentDomain.BaseDirectory;else// Web 应用logPath = AppDomain.CurrentDomain.BaseDirectory + @"bin\";}return logPath;}set{ logPath = value;}}private static string logFielPrefix = string.Empty;/// <summary>/// 日志文件前缀/// </summary>public static string LogFielPrefix{get { return logFielPrefix; }set { logFielPrefix = value; }}/// <summary>/// 写日志/// </summary>public static void WriteLog(string logFile, string msg){try{System.IO.StreamWriter sw = System.IO.File.AppendText(LogPath + LogFielPrefix + logFile + " " +DateTime.Now.ToString("yyyyMMdd") + ".Log");sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss: ") + msg);sw.Close();}catch{ }}/// <summary>/// 写日志/// </summary>public static void WriteLog(LogFile logFile, string msg){WriteLog(logFile.ToString(), msg);}}/// <summary>/// 日志类型/// </summary>public enum LogFile{Trace,Warning,Error,SQL}文章来自学IT网:/html/2009-04/21_1238_00.htmlc# 读写文本文件,二进制文件2008-03-25版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明/logs/42336562.htmlC# 操作文件版权所有 : 天山寒雪 QQ:757015000 MSN:haijun.qin@}/// <summary>/// 读取二进制文件/// </summary>/// <param name="filename"></param>private void ReadBinaryFiles(string filename){FileStream filesstream = newFileStream(filename, FileMode.Create);BinaryWriter objBinaryWriter = newBinaryWriter(filesstream);for (int index = 0; index < 20; index++){objBinaryWriter.Write((int)index);}objBinaryWriter.Close();filesstream.Close();}/// <summary>/// 写入二进制文件/// </summary>/// <param name="filepath"></param>private void WriteBinaryFiles(string filepath){if (!File.Exists(filepath)){//文件不存在}else{FileStream filestream = new FileStream(filepath, FileMode.Open, FileAccess.Read);BinaryReader objBinaryReader = new BinaryReader(filestream);try{while (true){//objBinaryReader.ReadInt32();}}catch (Exception ex){//已到文件结尾}}}File 类:Create(string FilePath)在指定路径下创建具有指定名称的文件。

ASP.NET日志的记录(登录日志和异常日志和操作日志)

ASP.NET日志的记录(登录日志和异常日志和操作日志)

⽇志的记录(登录⽇志和异常⽇志和操作⽇志)⼀、⽇志的记录⽇志的记录⽇志的记录其实没那么简单,需要登录⽇志,异常⽇志。

其实可以有这句话引出try{LogHelper.Insert("fun_orgmgr", "机构管理", "新增了机构:" + orgname, 1, UserAuthentication.Current().GetUserAuthInfo().UserID);}catch (Exception ex){result.Code = "1";result.Message = ex.Message;LogHelper.AddError("fun_orgmgr", "删除机构信息时出现异常:" + ex.Message, 1, ex.StackTrace);}⽇志记录页⾯代码其中的LogHelper.AddError()是Controls层中的LogHelper类的AddError⽅法,是增加⽇志功能。

LogHelper.Insert()是增加⽇志功能,这两个⽇志的增加要放到不同的表⾥⾯。

例如T_LoginLog和T_LoginLog在Insert()中的那⼏个字段是⼲什么⽤的呢?功能ID,⽇志摘要,⽇志正⽂,⽇志类型,发起⽤户ID,可以调出LogHelper.Insert()⽅法来看。

看前注意,这个LogHelper类是放到Controls层⾥⾯的,专门⽤来解决⽇志的问题,按我的理解应该是个bll层,拿AddError()来说,在赋值实体之前,实例化了⼀个实体,这个没什么说的,⼜实例化⼀个ActionLogService类,这个类是bll层的对⽇志实体进⾏增删改的操作,不仅对流程熟悉下,对怎样插⼊⽇志的需要的字段理清下。

最后⽤return bll.Insert(entity);来插⼊⽇志。

系统操作日志及Log4net配置

系统操作日志及Log4net配置

log4net使用手册1 简介1.1什么是Log4net本系统采用Log4net 控件来记录系统日志,那什么是Log4Net呢?Log4net是基于.net开发的一款非常著名的记录日志开源组件。

他最早是2001年7月由NeoWorks Limited启动的项目,基本的框架源于另外的一个非常著名的姐妹组件-log4j。

Log4net记录日志的功能非常强大。

它可以将日志分不同的等级,比不同的样式,将日志输出到不同的媒介。

1.2Log4net的优点几乎所有的大型应用都会有自己的用于跟踪调试的API。

因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。

然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。

经验表明,日志记录往往是软件开发周期中的重要组成部分。

它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。

另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。

Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。

1.3Log4net的安装用户可以从/log4net/下载log4net的源代码。

解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。

用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。

2 Log4net的结构log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及Layout(布局).2.1Logger2.1.1Logger接口Logger是应用程序需要交互的主要组件,它用来产生日志消息。

产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。

.net 写log 方法

.net 写log 方法

.net 写log 方法在.NET中,写log方法通常是为了记录应用程序的运行状态、错误信息或者其他重要信息,以便在后期进行排查和分析。

在.NET 中,有多种方式可以实现写log方法,下面我将从多个角度来介绍常见的方法:1. 使用Log4Net,Log4Net是一个流行的日志记录库,它提供了灵活的配置选项和多种日志输出方式,包括控制台、文件、数据库等。

你可以通过NuGet包管理器将Log4Net集成到你的.NET项目中,然后根据需要配置日志输出方式和日志级别,编写相应的日志记录代码。

2. 使用.NET Core内置的Logging,如果你在使用.NET Core,那么.NET Core提供了内置的Logging框架,你可以直接在应用程序中使用ILogger接口来记录日志。

通过注入ILogger实例到你的类中,你可以调用ILogger的方法来记录不同级别的日志信息。

3. 使用NLog,NLog是另一个流行的日志记录库,它提供了类似Log4Net的功能,包括多种日志输出方式和灵活的配置选项。

你可以通过NuGet包管理器将NLog集成到你的.NET项目中,并根据需要进行配置和编写日志记录代码。

4. 使用EventLog类,在.NET中,你还可以使用EventLog类来写入Windows事件日志。

通过EventLog类,你可以将自定义的日志信息写入到Windows事件日志中,这样可以方便地与系统日志进行集成和管理。

5. 使用Trace类,Trace类是.NET中用于跟踪和调试的工具,你可以使用Trace类来记录各种类型的日志信息。

通过配置TraceListener,你可以将日志信息输出到不同的目标,比如文件、控制台等。

总的来说,在.NET中写log方法有多种选择,你可以根据项目的需求和自己的偏好选择合适的日志记录方式。

无论使用哪种方式,都应该考虑日志记录的性能、安全性和可维护性,确保日志信息能够对应用程序的运行状态进行准确记录和分析。

ASP.NET记录错误日志的方式

ASP.NET记录错误日志的方式

记录错误⽇志的⽅式
程序记录错误⽇志是⼀种看起来对⼀般⽤户没什么作⽤,但对程序开发者⽤处很⼤的东西,它能查出错误或异常的程序马迹。

那么,常⽤的记录错误⽇志的⽅式有哪些呢?
⼤多数情况下使⽤的是
1、直接记录为txt/xml⽂件
2、Windows Event Log
其他记录错误⽇志的⽅式
1、当前进程的本地队列
没有简单⾼效的持久化机制实现,单次调⽤效率会降低
2、MSMQ
(1)、⾮进程内消息队列,单次调⽤速度上,没有进程内部本地队列速度快
(2)、内建持久化机制,即便down机,信息也不会丢失
(3)、能简单的通过启动多个消费端程序来消费队列元素,可扩展性强
3、独⽴进程中的WCF服务(进程间管道)
(1)、持久化机制取决于WCF服务实现⽅式,需要⾃⼰实现
(2)、本地机器上的进程之间命名管道通信,⽐⽹络通信快(如:MSMQ,service broker,数据库)
4、独⽴进程中的WCF服务(异步调⽤⽅式)
(1)、可惜⽆法使⽤命名管道
(2)、存在⽹络上的通信,速度降低
5、数据库
注意:⽇志数据库不能和业务数据库合并在⼀起,否则会互相影响(⾼并发下)
6、Sql server的Service Broker
7、MongoDB(或者类似的NoSQL数据库)
(1)、拥有持久化机制
(2)、速度快
(3)、如果记录下的⽇志需要有查询功能,这个选择最好(4)、不影响业务数据库性能。

如何利用ETW(EventTracingforWindows)记录日志

如何利用ETW(EventTracingforWindows)记录日志

如何利⽤ETW(EventTracingforWindows)记录⽇志ETW是Event Tracing for Windows的简称,它是Windows提供的原⽣的事件跟踪⽇志系统。

由于采⽤内核(Kernel)层⾯的缓冲和⽇志记录机制,所以ETW提供了⼀种⾮常⾼效的事件跟踪⽇志解决⽅案。

⼀、ETW模型事件监测(Event Instrumentation)总会包含两个基本的实体,事件的提供者(ETW Provider)和消费者(ETW Consumer),ETW框架可以视为它们的中介。

ETW Provider会预先注册到ETW框架上,提供者程序在某个时刻触发事件,并将标准化定义的事件提供给ETW框架。

Consumer同样需要注册到ETW框架上,在注册的时候可以设置事件的删选条件和接收处理事件的回掉。

对于接收到的事件,如果它满⾜某个注册ETW Consumer的筛选条件,ETW会调⽤相应的回调来处理该事件。

ETW针对事件的处理是在某个会话(ETW Session)中进⾏的,ETW Session提供了⼀个接收、存储、处理和分发事件的执⾏上下⽂。

ETW框架可以创建多⼀个会话来处理由提供者程序发送的事件,但是ETW Session并不会与某个单⼀的提供者绑定在⼀起,多个提供者程序可以向同⼀个ETW Session发送事件。

对于接收到的事件,ETW Session可以将它保存在创建的⽇志⽂件中,也可以实时地分发给注册的消费者应⽤。

ETW会话的开启和终⽌是通过 Session的开启和终⽌是通过ETW控制器(ETW Controller)进⾏管理的。

除了管理ETW Session之外,ETW Controller还可以禁⽤(Disable)或者恢复(Enable)注册到某个ETW Session上的ETW Provider。

综上所述,整个ETW模型由ETW框架本⾝和ETW Provider、ETW Consumer以及ETW Controller组成,上图很好地展⽰了这四者之间的关系。

asp.net问题排查事件查看器IIS日志

asp.net问题排查事件查看器IIS日志

问题排查事件查看器IIS⽇志事件查看器和IIS⽇志可帮助排查问题不能正常运⾏,事件查看器⾥会有记录。

iis⽇志中有访问记录。

转⾃:事件查看器事件查看器简介 ⽆论是普通计算机⽤户,还是专业计算机系统管理员,在操作计算机的时候都会遇到某些系统错误。

很多朋友经常为⽆法找到出错原因,解决不了故障问题感到困扰。

事实上,利⽤Windows内置的事件查看器,加上适当的⽹络资源,就可以很好地解决⼤部分的系统问题。

事件查看器的启动:可以通过单击⿏标右键⾄我的电脑,在弹出的快捷菜单下选择管理,会弹出计算机管理菜单,选择菜单下的事件查看器即可,单击会出现三个选项,其中的系统可以帮助⽤户查看电脑的上次开关机时间。

事件查看器可以做什么 微软在以Windows NT为内核的操作系统中集成有事件查看器,这些操作系统包括Windows 2000NTXP2003等。

事件查看器可以完成许多⼯作,⽐如审核系统事件和存放系统、安全及应⽤程序⽇志等。

系统⽇志中存放了Windows操作系统产⽣的信息、警告或错误。

通过查看这些信息、警告或错误,我们不但可以了解到某项功能配置或运⾏成功的信息,还可了解到系统的某些功能运⾏失败,或变得不稳定的原因。

安全⽇志中存放了审核事件是否成功的信息。

通过查看这些信息,我们可以了解到这些安全审核结果为成功还是失败。

应⽤程序⽇志中存放应⽤程序产⽣的信息、警告或错误。

通过查看这些信息、警告或错误,我们可以了解到哪些应⽤程序成功运⾏,产⽣了哪些错误或者潜在错误。

程序开发⼈员可以利⽤这些资源来改善应⽤程序。

点击“开始→运⾏”,输⼊eventvwr,点击“确定”,就可以打开事件查看器,它的界⾯如图所⽰。

查看事件的详细信息: 选中事件查看器左边的树形结构图中的⽇志类型(应⽤程序、安全性或系统),在右侧的详细资料窗格中将会显⽰出系统中该类的全部⽇志,双击其中⼀个⽇志,便可查看其详细信息。

在⽇志属性窗⼝中我们可以看到事件发⽣的⽇期、事件的发⽣源、种类和ID,以及事件的详细描述。

.net 系统操作日志设计

.net 系统操作日志设计

一、概述在现代大型软件系统中,操作日志设计是非常重要的一部分。

操作日志能够记录系统中用户的操作行为,对于系统的安全性和可追溯性起到了关键作用。

.net系统作为一种常用的开发评台,对操作日志的设计有着丰富的经验和成熟的技术支持。

本文将从. net系统操作日志的设计原则、技术实现和应用场景等方面展开讨论。

二、.net系统操作日志设计原则1. 安全性原则操作日志中会涉及到用户的个人信息和系统数据,因此在设计操作日志时需要考虑到数据的安全性。

这就要求在记录日志时要对敏感信息进行脱敏处理,以防止泄露用户隐私和系统数据。

2. 可追溯原则操作日志的设计应当能够清晰地记录用户的每一个操作过程,包括操作时间、操作人员、操作对象等信息。

这样在系统出现问题时,可以方便地根据操作日志进行追踪和定位。

3. 可扩展性原则随着系统的不断发展和用户需求的变更,操作日志的内容和格式可能会发生变化。

因此在设计操作日志时应当考虑到日志的扩展和灵活性,以适应系统未来的需求变更。

4. 性能原则操作日志的记录会产生大量的数据量,因此在设计操作日志时需要考虑到对系统性能的影响。

合理的日志记录策略和日志存储优化是保证系统性能的重要手段。

三、.net系统操作日志技术实现1. 日志记录库在.net系统中,可以使用现有的日志记录库来实现操作日志的记录。

比如log4net是一个常用的日志记录库,它提供了丰富的配置选项和灵活的日志输出方式,可以满足操作日志记录的需求。

2. 日志格式在设计操作日志时,需要考虑到日志的格式。

可以采用XML、JSON 等格式来记录操作日志的内容,并通过序列化和反序列化来实现日志的读写。

3. 日志脱敏针对用户的个人信息和系统数据,可以在记录日志时进行脱敏处理。

比如对于通联可以只记录后四位,对于唯一识别信息码可以只记录部分信息,以达到保护用户隐私的目的。

4. 日志查询为了方便用户管理和系统维护人员查询操作日志,可以设计相应的日志查询功能。

net core api 接口执行完 写日志

net core api 接口执行完 写日志

net core api 接口执行完写日志"Net Core API接口执行完写日志" - 一步一步回答你好!在本文中,我将详细介绍Net Core API接口执行完后如何写日志。

下面将按照一步一步的方式进行讲解,确保你能够完全理解并受益。

步骤1 - 确定日志记录的重要性在开始讲解如何在Net Core API接口执行完后写日志之前,让我们先明确一下为什么我们应该进行日志记录。

日志记录对于应用程序的可靠性和性能调优至关重要。

通过记录关键信息,我们可以跟踪并解决应用程序中的潜在问题。

此外,日志还可以帮助我们进行性能分析和监控应用程序的行为。

因此,在设计API接口时,考虑并实现日志记录机制是非常重要的。

步骤2 - 引入日志记录工具为了在Net Core API中实现日志记录,我们需要引入一个日志记录工具。

Net Core中有很多可选的日志记录工具,例如Serilog、NLog和log4net。

在本文中,我们将使用Serilog作为示例来说明如何在Net Core API中编写日志。

首先,您需要在.NET Core项目中引入Serilog。

您可以通过NuGet包管理器或手动下载Serilog包并添加到项目中来完成此操作。

要使用Serilog,您需要在Startup类的ConfigureServices方法中进行配置,以便将其添加到DI容器中:csharppublic void ConfigureServices(IServiceCollection services){services.AddControllers();添加SerilogLog.Logger = new LoggerConfiguration().WriteTo.Console().CreateLogger();}为了添加Serilog,在ConfigureServices方法中使用AddControllers 方法之后,我们创建了一个新的LoggerConfiguration并添加了一个输出到控制台的配置。

net日志的编写

net日志的编写

using System;using System.Configuration;using System.Data;using log4net;using log4net.Config;using log4net.Appender;using yout;using log4net.Util;namespace BizTalk.DAL.Log{///<summary>///日志文件处理///</summary>public sealed class LogUtil{#region变量//ConfigurationSettings.AppSettingsprotected static readonly log4net.ILog logger = LogManager.GetLogge r(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);private static string logFilePath = string.Empty;//日志文件错误文件处理文件路径private static string str_configfile = @"E:\Suzhou Project EDI\代码\ BizTalkSolution_suzhou\BizTalk.suzhou.Config\Config\DB.config";//日志文件的读写也由 xml文件读取private static string logErrFilePath =System.Configuration.Configur ationManager.AppSettings["ErrFilePath"];private static string logWarnFilePath = string.Empty;//日志文件路径private static string logInfoFilePath =System.Configuration.Configu rationManager.AppSettings["logFilePath"];#endregion///<summary>/// Ctr///</summary>public LogUtil() { }#region获得参数设置///<summary>///根据配置文件里面参数名称读参数///</summary>///<param name="ParameterName"></param>///<returns></returns>public static string Get_Parameter(string ParameterName) {DataSet ds_config =BizTalk.DAL.Data.XmlObject.GetXml(str_config file);string str_xml_proc = ds_config.Tables[ParameterName].Rows[0][" value"].ToString();return str_xml_proc;}#endregion#region写日志文件Methodpublic static void WriteLog(string msg){string filePath = logFilePath;FileAppender fa = GetFileAppender(filePath);log4net.Config.BasicConfigurator.Configure(fa);//写入日志logger.Debug(msg);}//日志文件写入public static void WriteLogInfo(string msg){//string filePath = logInfoFilePath;string filePath = Get_Parameter("logFilePath").Trim();FileAppender fa = GetFileAppender(filePath);log4net.Config.BasicConfigurator.Configure(fa);(msg);}public static void WriteLogWarn(string msg){string filePath = logWarnFilePath;FileAppender fa = GetFileAppender(filePath);log4net.Config.BasicConfigurator.Configure(fa);logger.Warn(msg);}//错误文件写入public static void WriteLogErr(string msg){//string filePath = logErrFilePath;string filePath = Get_Parameter("ErrFilePath").Trim();FileAppender fa = GetFileAppender(filePath);log4net.Config.BasicConfigurator.Configure(fa);logger.Error(msg);}#endregion///<summary>///取得日志文件位置和样式///</summary>///<param name="filePath">文件路径</param>///<returns></returns>private static FileAppender GetFileAppender(string filePath) {//日志文件布局PatternLayout sLayout = new PatternLayout("%date [%thread] %-5l evel %logger [%ndc] - %message%newline");sLayout.Header = "[Header]\r\n";sLayout.Footer = "[Footer]\r\n";//日志文件路径string fileName = filePath + "\\" + System.DateTime.Now.ToStrin g("yyyy-MM-dd")+ "\\" + System.DateTime.Now.ToString("yyyy-M M-dd") + "-Log.log";FileAppender fa = new FileAppender(sLayout, fileName);return fa;}}}using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;namespace BizTalk.DAL.Log{public class LogBase{private static void Write(string msg, string category) {string path = string.Format("c:\\{0}.log", category);using (System.IO.StreamWriter sw = new System.IO.StreamWriter(p ath, true)){try{string lin = string.Format("[{2}] {0}\r\n:{1}", categor y, msg, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));sw.WriteLine(lin);sw.Close();}catch (Exception e)Console.WriteLine(e);sw.Close();}}}public static void TraceWrite(string message, string category) {try{if (category == "I"){TraceSwitch mySwitch = new TraceSwitch("BizImpTrace", " Biztalk trace message");if (mySwitch.TraceError){Write(message, "BizImpException");//Trace.Listeners[1].WriteLine(message, "BizImpExce ption");}}else if (category == "E"){TraceSwitch mySwitch = new TraceSwitch("BizExTrace", "B iztalk trace message");if (mySwitch.TraceError){//System.Diagnostics.DefaultTraceListener = Trace.L isteners[2];Write(message, "BizExException");//Trace.Listeners[2].WriteLine(message, "BizImpExce ption");}}else if (category == "R")TraceSwitch mySwitch = new TraceSwitch("BizRouterTrace ", "Biztalk trace message");if (mySwitch.TraceError){//System.Diagnostics.DefaultTraceListener = Trace.L isteners[2];Write(message, "BizRouterException");//Trace.Listeners[3].WriteLine(message, "BizRouterE xception");}}else{//if (mySwitch.TraceError)//{//System.Diagnostics.DefaultTraceListener = Trace.Liste ners[2];Write(message, "BizException");//Trace.Listeners[0].WriteLine(message, "BizRouterExcep tion");//}}}catch { }}}}配置文件增加:<add key="logFilePath" value="c:\log-file\"/><add key ="ErrFilePath" value ="c:\log-err\"/>在指定的目录,按照日期生成日志文件。

使用C#.NET写入事件日志

使用C#.NET写入事件日志

使⽤C#.NET写⼊事件⽇志写⼊事件⽇志事件⽇志给应⽤程序提供了⼀种标准、集中的⽅法来记录重要的软件和硬件事件。

Windows 提供了⼀个⽤于查看⽇志的标准⽤户界⾯,即事件查看器。

使⽤公共语⾔的运⾏库 EventLog 组件,您可以⽅便地连接到本地和远程计算机上的现有事件⽇志,并在这些⽇志中填写条⽬。

您也可以从已有的⽇志读取条⽬并创建您⾃⼰的⾃定义事件⽇志。

使⽤最简单的⽅式,只需⼏步就可创建⼀个⽰例应⽤程序并写⼊事件⽇志中:1. 打开 Visual Studio .NET2. 在 Microsoft C# 中新建控制台应⽤程序。

Visual C# .NET 为您创建⼀个公⽤类,以及⼀个空的 Main() ⽅法。

3. 请确保项⽬⾄少引⽤了 System.dll。

4. 对 System 和 System.Diagnostics 名称空间使⽤ using 指令,这样,在后⾯的代码中就不需要限定这些名称空间中的声明了。

这些语句必须放在所有其他声明之前。

using System;using System.Diagnostics;5. 若要写⼊事件⽇志,需要提供以下⼏条信息:您的消息、要写⼊的⽇志名(如果不存在,就会创建⼀个名称)以及⼀个表⽰事件源的字符串。

某种源只能在⼀个事件⽇志中记录,因此,如果要在多个⽇志中写⼊消息,必须定义多个源。

string sSource;string sLog;string sEvent;sSource = "dotNET Sample App";sLog = "Application";sEvent = "Sample Event";6. 有了所有这些信息后,第⼀步是使⽤ EventLog 类的两个静态⽅法先检查您的事件源是否存在,如果不存在,则创建与特定事件⽇志关联的事件源。

如果指定的⽇志名不存在,则在写⼊第⼀个条⽬时⾃动创建该名称。

C#操作windows事件日志项

C#操作windows事件日志项

C#操作windows事件⽇志项1///<summary>2///指定事件⽇志项的事件类型3///</summary>4public enum EventLogLevel5 {6///<summary>7///错误事件。

它指⽰⽤户应该知道的严重问题(通常是功能或数据的丢失)。

8///</summary>9 Error = 1,10///<summary>11///警告事件。

它指⽰并不⽴即具有重要性的问题,但此问题可能表⽰将来会导致问题的条件。

12///</summary>13 Warning = 2,14///<summary>15///信息事件。

它指⽰重要、成功的操作。

16///</summary>17 Information = 4,18///<summary>19///成功审核事件。

它指⽰当审核访问尝试成功(例如成功登录)时发⽣的安全事件。

20///</summary>21 SuccessAudit = 8,22///<summary>23///失败审核事件。

它指⽰当审核访问尝试失败(例如打开⽂件的尝试失败)时发⽣的安全事件。

24///</summary>25 FailureAudit = 16,26 }指定事件⽇志项的事件类型1public static class WebUtil2 {3///<summary>4///写⽇志信息5///</summary>6///<param name="Message">⽇志信息</param>7public static void WriteLog(string Message, EventLogLevel logLevel = rmation)8 {9string sourceName = "DemoEventLog";//Application-应⽤程序⽇志10 WriteCustomLog(sourceName, Message, logLevel);11 }12///<summary>13///写异常⽇志14///</summary>15///<param name="exp">异常信息</param>16public static void WriteLog(Exception exp, EventLogLevel logLevel = EventLogLevel.Error)17 {18string filepath = string.Empty;19try20 {21 filepath = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;22 }23catch (Exception)24 {2526 }27 String Message = string.Format("\n\nURL:\n {0}\n\nMESSAGE:\n {1}\n\nSTACK TRACE:\n {2}", filepath, exp.Message, exp.StackTrace);28string sourceName = "DemoEventLog";//Application-应⽤程序⽇志29 WriteCustomLog(sourceName, Message, logLevel);30 }31///<summary>32///写异常⽇志33///设置:因为系统⽇志的操作是有权限控制的,所以我们还要把对系统⽇志操作的权限赋给⽤户,34///⽅法如下:“开始->运⾏”,输⼊命令,“regedt32”,找到“System->CurrentControlSet->Services->Eventlog”,35///选择“安全->权限->添加”,然后找到本机的“AspNet”⽤户,加进来并且给读取权限就好了,36///加进来后⽬录中会多⼀个“aspnet_wp account”37///系统出错后,会⾃动将出错信息记录到系统⽇志中,你可以在“开始->程序->管理⼯具->事件查看器”中发现⼀个新的项⽬“TownLog”,这便是记录出错信息的。

VS2019中.NET如何实现打日志功能

VS2019中.NET如何实现打日志功能

VS2019中.NET如何实现打⽇志功能⽬录1:⾸先安装插件2:添加对应的配置⽂件3:在⽣成的AssemblyInfo类中填写如下代码4:添加打印⽇志的类,这⾥的⽅法你可以根据⾃⼰的需要写5:在报异常的地⽅或者你需要记录的地⽅调⽤这些⽅法就可以了。

打印之后会在根⽬录下⽣成⼀个log⽂件。

打开就可已看到。

1:⾸先安装插件2:添加对应的配置⽂件<?xml version="1.0" encoding="utf-8"?><configuration><system.web><compilation debug="true" targetFramework="4.7.2" /><httpRuntime targetFramework="4.7.2" /></system.web><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><log4net><!--错误⽇志-->//<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"><!-- ⽇志⽂件存放位置,可以为绝对路径也可以为相对路径 --><file value="log\\LogError\\" /><!--是否⽀持分割⽂件--><appendToFile value="true" /><!--⽇志⽂件的记录形式--><rollingStyle value="Date" /><!-- ⽇志⽂件的命名规则 --><datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" /><!-- 当将⽇期作为⽇志⽂件的名字时,必须将staticLogFileName的值设置为false --><staticLogFileName value="false" /><!--当⽇志⽂件达到MaxFileSize⼤⼩,就⾃动创建备份⽂件。

.NET写日志-log

.NET写日志-log

.NET写⽇志-log/// <summary>/// 寫log add by Rain 做测试⽤/// </summary>/// <param name="Logmessage"></param>public void WriteLog(string Logmessage){string logtime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");string logfilename = "AutoRejectServicelog" + DateTime.Now.ToString("yyyyMMdd") + ".txt";//string savePath =System.Web.HttpContext.Current.Server.MapPath(@"log");//string savePath = AppDomain.CurrentDomain.BaseDirectory + @"log\";string savePath = "C:\\AutoReject\\log";if (!System.IO.Directory.Exists(savePath)){ //需要注意的是,需要对这个物理路径有⾜够的权限,否则会报错//另外,这个路径应该是在⽹站之下,⽽将⽹站部署在C盘却把上传⽂件保存在D盘System.IO.Directory.CreateDirectory(savePath);}Logmessage = "記錄執⾏步驟信息:進⼊該事件時間:" + logtime + "\r\n" + "相關信息:\r\n" + Logmessage + "\r\n";System.IO.StreamWriter fd = new System.IO.StreamWriter(savePath + "\\" + logfilename, true, System.Text.Encoding.Default); fd.WriteLine(Logmessage);fd.Flush();fd.Close();}/// <summary>/// 寫log add by Rain 做测试⽤/// </summary>/// <param name="Logmessage"></param>public void WriteErrorLog(string Logmessage){string logtime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");string logfilename = "AutoRejectServicelog" + DateTime.Now.ToString("yyyyMMdd") + ".txt";//string savePath =System.Web.HttpContext.Current.Server.MapPath(@"log");//string savePath = AppDomain.CurrentDomain.BaseDirectory + @"log\";string savePath = "C:\\AutoReject\\log";if (!System.IO.Directory.Exists(savePath)){ //需要注意的是,需要对这个物理路径有⾜够的权限,否则会报错//另外,这个路径应该是在⽹站之下,⽽将⽹站部署在C盘却把上传⽂件保存在D盘System.IO.Directory.CreateDirectory(savePath);}Logmessage = "系統發⽣錯誤,發⽣時間:" + logtime + "\r\n" + "錯誤信息:\r\n" + Logmessage + "\r\n";System.IO.StreamWriter fd = new System.IO.StreamWriter(savePath + "\\" + logfilename, true, System.Text.Encoding.Default); fd.WriteLine(Logmessage);fd.Flush();fd.Close();}。

net输出错误日志

net输出错误日志

net输出错误⽇志在使⽤net开发webapi的时候,有时候程序异常了,外⾯只能看到⼀个错误:an error occur怎么才能将具体的错误堆栈信息输出来呢?1.在startup.cs⽂件中添加如下代码就可以将错误信息输出:GlobalConfiguration.Configure(c => c.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always);代码如下:2.Global.asax中捕获api错误信息:protected void Application_Error(object sender, EventArgs e){#region Error Logvar exp = HttpContext.Current.Server.GetLastError();var sbErrorMsg = new StringBuilder();sbErrorMsg.Append(DateTime.Now);sbErrorMsg.Append(" 发⽣⼀个系统错误,如下:");sbErrorMsg.Append("\r\n");sbErrorMsg.Append("--------------------------------------------------------------------------------");sbErrorMsg.Append("\r\n");sbErrorMsg.Append("客户机IP:");sbErrorMsg.Append(HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]); sbErrorMsg.Append("\r\n错误地址:");sbErrorMsg.Append(Request.Url);sbErrorMsg.Append("\r\n上⼀个URL:");sbErrorMsg.Append((Request.UrlReferrer != null ? Request.UrlReferrer.AbsoluteUri : "")); sbErrorMsg.Append("\r\n");var error = Common.ExceptionHelper.GetError(sbErrorMsg.ToString(), exp);Console.WriteLine(error);#endregion}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.NET编程实现对Windows事件日志的操作
1.Windows事件日志
当没有图形用户界面的应用程序(例如组件、Web Service、Windows服务等)的某些特定事件发生时,应该把事件信息记录在某一个系统日志中,以便用户或管理员检查处理。

比如,应用程序不能正常启动、无法完成一个操作或内存不足导致性能下降时,将这些信息写入事件日志。

在Windows NT、Windows 2000和Windows XP系统中,提供有事件日志。

默认情况下有3个事件日志:系统日志(记录系统组件中发生的事件,如驱动程序的事件)、安全日志(记录安全改动和破坏安全许可的操作企图)和应用程序日志(记录注册应用程序发生的事件)。

当然,我们也可以创建自定义日志,但大多数程序都是将其事件写入标准的应用程序日志。

日志中可以记录5种类型的事件:
⏹Information(信息):开始或停止一个程序时产生。

⏹Warning(警告):当一个可能在将来引发问题的事件发生时产生。

⏹Error(错误):当出现重要错误时产生。

⏹Success audit(审计成功):当一个访问操作成功时产生。

⏹Failure audit(审计失败):当一个访问操作失败时产生。

浏览Windows事件日志可以使用系统提供的事件查看器(Event Viewer),通过“控制面板”—“管理工具”—“事件查看器”,即可查看当前的事件日志情况。

当系统出现异常时,管理员可根据日志记载进行相应的处理,可以说事件日志在系统中起到了十分重要的作用。

2.演示程序介绍
一般而言,对日志进行操作的程序多数没有操作界面,如系统服务、驱动程序等。

本例中我们使用一个简单的Windows程序来演示它的操作。

如图2所示,单击左侧按钮,将读取系统应用程序日志中指定事件源的日志项内容并显示在列表框中;单击中间按钮将向系统应用程序日志中写入一条信息;单击右侧按钮将新建一自定义日志并写入一条信息和一条警告。

3..NET对事件日志的操作
.NET提供了EventLog类用于对事件日志进行读写,甚至可以创建新的日志。

使用前,需引用System.Diagnostics命名空间:
Imports System.Diagnostics
EventLog对象有以下一些重要的事件、方法和属性:
●EntryWritten事件:当一个事件被写入日志时发生
●CreateEventSource方法:在指定的日志中创建一个事件源
●DeleteEventSource方法:删除一个事件源和与之关联的记录项
●WriteEntry方法:向指定的日志写入记录项
●Exists方法:判断指定的日志是否存在
●SourceExists方法:判断一个指定的事件源是否存在于日志中
●GetEventLogs方法:检索计算机中所有事件日志的列表
●Clear方法:从事件日志中移除所有项
●Delete方法:删除整个事件日志(小心使用)
●Source属性:获取或设置在写入事件日志时要使用的源名称
●Entries属性:获取事件日志的内容
●Log属性:获取或设置读取或写入的日志名称,如果不指定,默认为系统日志
4.读取事件日志项
可以用EventLog.GetEventLogs方法检索系统现有的日志,返回值为EventLog对象:
Dim ev As EventLog
For Each ev In EventLog.GetEventLogs
ListBox1.Items.Add(ev.Log)
//将系统中现有的日志名加入到列表框中
Next
多数情况下,已经明确要读取哪一个事件日志,因此只需要创建EventLog对象,利用其Entries属性来读取日志项。

此属性返回一个EventLogEntry对象数组,数组中的每个对象代表日志中的一个项。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ev As New EventLog("Application")
'创建对应用程序日志的一个引用
Dim evtry As EventLogEntry
'定义EventLogEntry变量
For Each evtry In ev.Entries
If evtry.Source = "ATI Smart" Then
'Entries属性会返回日志中的所有项,应使用某种方式筛选日志项,本例按事件来源进行筛选
ListBox1.Items.Add(evtry.EntryType.ToString)
ListBox1.Items.Add(evtry.Index.ToString)
ListBox1.Items.Add(evtry.TimeWritten.ToString)
ListBox1.Items.Add(evtry.Message.ToString)
'用列表框显示符合条件日志项的类型、索引值、写入时间、消息内容等
End If
Next
End Sub
5.写入事件日志项
利用EventLog对象向事件日志中写入项也十分简单,但是,应用程序只有作为一个有效的事件源注册后才能向事件日志中写入项。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim ev As New EventLog
If Not ev.SourceExists("Demo") Then
ev.CreateEventSource("Demo", "Application")
'将Demo注册为事件源,要写入的日志为应用程序日志
End If
ev.Source = "Demo"
ev.Log = "Application"
ev.WriteEntry("这是一个演示,向应用程序日志写入一个信息!!!")
End Sub
如果希望在系统的3个默认日志之外创建一个自定义的日志,只需使用CreateEventSource方法时给出一个新的日志名,新日志即可被自动建立。

系统本身的3个日志分别是系统日志(System)、安全日志(Security)和应用程序日志(Application),注意日志名只有前8个字符是有效的。

ev.CreateEventSource("MyDemoApp","MyLog")
//将MyDemoApp注册为事件源,新建MyLog日志并准备写入
通过调用EventLog对象的WriteEntry方法,可以向日志中写入事件消息,写入前需先设置事件的Source、Log等属性。

如需新建日志或事件源,可以先作一个判断。

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim ev As New EventLog
If Not ev.Exists("MyNewLog") Then
'如MyNewLog日志不存在则新建它
ev.CreateEventSource("DemoApp", "MyNewLog")
End If
ev.Source = "DemoApp"
ev.Log = "MyNewLog"
ev.WriteEntry("这是一个演示,创建自定义日志并写入信息!!!")
ev.WriteEntry("这里出现了一个错误!", EventLogEntryType.Error)
'写入一个错误事件项
End Sub
下图是执行以上代码后的事件日志项情况。

在开发中,我们当然也可以创建基于文本的追踪文件来记录事件信息,但显然事件日志使用起来更方便、高效且易于为用户接受。

本文中的代码在Windows XP SP2, 2003环境下调试通过。

相关文档
最新文档