.net使用log4net日志框架(记录到数据库) 您所在的位置:网站首页 写日志文件和写数据库 .net使用log4net日志框架(记录到数据库)

.net使用log4net日志框架(记录到数据库)

2024-07-14 20:35| 来源: 网络整理| 查看: 265

记录下log4net日志框架在项目中的使用:

1.通过Nuget安装Log4net程序包

 

2.添加配置文件,配置日志记录的格式等信息

log4net.config配置信息如下:

配置信息中,日志数据库连接串的参数配置,比如版本号和公钥,可以去对应的程序集中查看。查看方法:

 

日志内容字段,@message参数的值是自定义的,指的是要记录的日志内容,参数值从调用的地方传入。(Log4NetToSqlServer.Utility.CustomLayout类是需要自己创建的,具体代码在下面第三步中)

其他字段都是直接从log4net封装好的log4net.Layout.PatternLayout类中获取。

 

记得要将新建的log4net.config文件设置为始终复制,这一步很关键,如果不设置,程序在运行时会找不到这个配置文件。 

上面配置文件中使用的是SqlServer数据库,其他数据库的配置可以参考:http://logging.apache.org/log4net/release/config-examples.html

 

3.封装自定义字段传值所需要的方法

首先在项目中创建Utility文件夹,用于存放相关帮助类的代码。

接下来要创建下面四个类:

CustomLayout.cs

public class CustomLayout : PatternLayout { //构造函数 把指定的需要写入数据库的字段添加进来 public CustomLayout() { this.AddConverter("property", typeof(LogInfoPatternConverter)); } }

LogContent.cs

public class LogContent { public LogContent(string message) { Message = message; } /// /// 日志描述信息 /// public string Message { get; set; } }

LogHelper.cs

public class LogHelper { public static readonly ILog ilog = LogManager.GetLogger("TestDataBase.Log"); public static void Info(LogContent content) { ilog.Info(content); } public static void Error(LogContent content, Exception ex) { ilog.Error(content, ex); } public static void Warn(LogContent content) { ilog.Warn(content); } public static void Fatal(LogContent content) { ilog.Fatal(content); } public static void Debug(LogContent content) { ilog.Debug(content); } }

LogInfoPatternConverter.cs

public class LogInfoPatternConverter : PatternLayoutConverter { protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) { if (Option != null) { //写入指定键的值 WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent)); } else { WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties()); } } /// /// 通过反射获取传入的日志对象的某个属性值 /// /// private object LookupProperty(string property, LoggingEvent loggingEvent) { object propertyValue = string.Empty; PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property); if (propertyInfo != null) { propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null); } return propertyValue; } }

上面代码实现了对log4net.config配置文件中@message字段的参数传递功能。

如果要加其他自定义参数字段,可以直接在LogContent.cs中添加字段即可,比如要记录‘操作人姓名’,可以修改代码为:

同时需要在log4net.config中修改sql语句和增加对应的配置节点:

 

4.编辑项目中Properties文件夹中的Assemblyinfo.cs(AssemblyInfo.cs是在创建项目时自动生成的,主要用来设定生成的有关程序集的常规信息dll文件的一些参数)

在 Assemblyinfo.cs的最下面,添加如下代码:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Configs\\log4net.config", Watch = true)]

作用是通过反射,全局注册配置,指定读取log4net的配置文件。 

 

5.在数据库中新增日志表:

create table LogDetails( logID int identity(1,1) not null, LogDate datetime not null, LogLevel nvarchar(20) not null, Thread nvarchar(20) not null, Logger nvarchar(20) not null, LogMessage nvarchar(3000) not null, constraint PK_LogDetails primary key NONCLUSTERED ( logID asc ) )

 

6.写不同等级的日志

 

启动程序,可以看到数据库中日志表记录了相关日志信息。

 

除了往数据库记录日志外,也可以把日志记录在文本中,可以参考:https://blog.csdn.net/liangmengbk/article/details/117187410



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有