栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

记录下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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/909110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号