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

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

1.通过Nuget安装Log4net程序包

 

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

log4net.config配置信息如下:





  
  
    
    

    
    

    
    

    
    

    
    
      
      
      
    

    
    
      
      
      
      
        
      
    

    
    
      
      
      
      
        
      
    

    
    
      
      
      
      
        
      
    

    
    
      
      
      
      
        
      
    

  


  
    
  






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

.net使用log4net日志框架(记录到数据库)_第1张图片

 

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

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

 

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

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

 

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

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

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

.net使用log4net日志框架(记录到数据库)_第2张图片

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中添加字段即可,比如要记录‘操作人姓名’,可以修改代码为:

.net使用log4net日志框架(记录到数据库)_第3张图片

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

.net使用log4net日志框架(记录到数据库)_第4张图片

.net使用log4net日志框架(记录到数据库)_第5张图片


 

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.写不同等级的日志

.net使用log4net日志框架(记录到数据库)_第6张图片

 

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

.net使用log4net日志框架(记录到数据库)_第7张图片

 

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

你可能感兴趣的:(c#,sql,server,ASP.NET,log4net,.net日志,c#日志记录,数据库记录日志,SqlServer)