> 文章列表 > C#-log4net日志记录器

C#-log4net日志记录器

C#-log4net日志记录器

XmlConfigurator.ConfigureAndWatch(): 这是一个log4net库提供的方法,用于动态配置log4net日志记录器。它通过读取一个log4net配置文件,如XML文件,来配置日志系统。这个方法还会启动一个后台线程,监视配置文件的更改,当配置文件更改时,重新加载配置信息,从而使得日志系统可以动态地改变日志的输出行为。

举例说明:假设有一个项目使用log4net记录日志,配置文件为log4net.config,使用XmlConfigurator.ConfigureAndWatch(new FileInfo(“log4net.config”))方法可以让log4net实时监测配置文件是否发生更改。

LogHelperBridge.UpdateSaveDirectory(“”): 这是一个日志记录器的工具类,用于更新日志保存路径。它通常是一个桥接类,将具体的日志记录器类和日志系统的管理器进行解耦。通过该方法,可以在不修改日志记录器类的情况下,动态更改日志保存路径。

举例说明:假设有一个Web应用程序,在每次用户访问网站时,需要记录访问日志。使用LogHelperBridge.UpdateSaveDirectory(“D:\\Logs”)方法,可以将日志保存到D盘的Logs目录下。

LogHelper.UpdateSaveDirectory(): 这是一个具体的日志记录器类,它封装了log4net库的API,提供了更加便捷的日志记录方式。通过该类,可以实现日志记录的级别、格式、输出目的地等多种定制化。
举例说明:在Web应用程序中,可以通过LogHelper.Info(“User Access Web Site!”)方法记录一条信息级别的日志,内容为“用户访问网站”。

LogManager 类是 log4net 框架的核心类,用于管理日志记录器。GetLogger 方法根据参数类型返回一个 ILogger 接口的实例,这个实例就是用于记录日志的对象。ILog 接口是 ILogger 接口的一个包装器,它提供了一些额外的功能,比如定义了更简单的日志级别,以及写日志信息的方法。

举个例子,如果一个项目有多个类需要记录日志,我们可以在每个类中都使用 GetLogger 方法获取一个记录器对象,然后根据需要写入日志信息。例如:

public class MyClass
{private readonly ILog log = LogManager.GetLogger(typeof(MyClass));public void DoSomething(){log.Info("Method DoSomething called.");// do somethinglog.Debug("Method DoSomething finished.");}
}

这个示例中,MyClass 类中有一个 DoSomething 方法需要记录日志。在类的构造函数中使用 GetLogger 方法创建了一个 ILog 类型的 log 对象。然后在 DoSomething 方法中使用 log 对象写入了两条日志信息,一条是 INFO 级别的,一条是 DEBUG 级别的。


在CAD实现日志记录:

  1. 在 Visual Studio 中,打开 C#Cad 项目。
  2. 在解决方案资源管理器中,右键单击您的项目并选择“管理 NuGet 包”。
  3. 在 NuGet 管理器中,搜索并安装 log4net 包。
  4. 在代码中添加 using 声明以导入 log4net 命名空间。
  5. 在代码中,初始化 log4net。可以使用以下代码:
using log4net;
using log4net.Config;// ...XmlConfigurator.Configure(); // 初始化 log4net
ILog log = LogManager.GetLogger(typeof(YourClassName));
  1. 在的代码中,使用 log4net 记录您想要记录的操作。可以使用以下代码:
log.Info("Your message here");

还可以使用其他日志级别,例如 Debug、Warn、Error 和 Fatal。

  1. 在项目中,添加一个 log4net 配置文件。该文件指定日志输出位置、格式等配置。以下是一个示例 log4net 配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><file value="logs\\mylog.txt" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><root><level value="ALL" /><appender-ref ref="ConsoleAppender" /><appender-ref ref="RollingFileAppender" /></root>
</log4net>

该配置文件指定将日志输出到控制台和一个名为“mylog.txt”的文件中。

  1. 在代码中,添加以下行以读取 log4net 配置文件:
XmlConfigurator.Configure(new FileInfo("log4net.config"));

完整代码示例:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace App
{public class AppStart{private  readonly ILog log = LogManager.GetLogger(typeof(AppStart));static AppStart(){XmlConfigurator.Configure(new FileInfo("log4net.config"));}[CommandMethod("CreateDemo")]public void CreateDemo(){Document doc = Application.DocumentManager.MdiActiveDocument;using (doc.LockDocument()){Application.ShowAlertDialog("Hello!");log.Info($"方法:{nameof(CreateDemo)}" );string logFilePath = Path.Combine(AppDomain.CurrentDomain.ass,"logs","mylogs.txt");if (File.Exists(logFilePath)){Application.ShowAlertDialog($"日志生成成功,路径:{logFilePath}");}else{Application.ShowAlertDialog("日志生成失败!");}}}}
}

private readonly ILog log = LogManager.GetLogger(typeof(AppStart)); 这行代码的意思是创建一个 log 对象,它的类型是 ILog 接口,它使用 LogManager 类的 GetLogger 方法获取一个 AppStart 类型的日志记录器对象。

编写配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /></configSections><log4net><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><file value="mylog.txt" /><appendToFile value="true" /><rollingStyle value="Date" /><datePattern value="yyyyMMdd" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><root><level value="ALL" /><appender-ref ref="ConsoleAppender" /><appender-ref ref="RollingFileAppender" /></root></log4net></configuration>

以上是一个 log4net 配置文件的示例。该文件指定了两个附加器 (appender),分别是 ConsoleAppender 和 RollingFileAppender。

ConsoleAppender 指定将日志输出到控制台。其中,PatternLayout 用于指定日志输出的格式。该示例中使用的格式是:

%date [%thread] %-5level %logger - %message%newline

该格式中包含以下转换字符:

%date:输出日期和时间。
[%thread]:输出线程 ID。
%-5level:输出日志级别(这里的“-”表示左对齐,5 表示最大宽度为 5 个字符)。
%logger:输出记录日志的类名。
-%message%newline:输出日志消息并换行。
RollingFileAppender 指定将日志输出到名为“mylog.txt”的文件中。其中,rollingStyle 指定以日期方式滚动日志文件(即每天生成一个新文件),datePattern 指定文件名日期格式为“yyyyMMdd”。

最后,root 元素指定根日志记录器的配置。level 元素指定日志级别(ALL 表示记录所有级别的日志),appender-ref 元素指定要使用的附加器。在本示例中,同时使用了 ConsoleAppender 和 RollingFileAppender。