ASP.NET Core使用log4net记录日志

 

  .NET常用的日志组件有NLog、Log4net等,.NET CORE下微软也自带了日志组件,到目前为止还没用过,而我本人常用的是log4net,下面简单讲讲.NET CORE下怎么使用log4net记录日志。

  新建一个ASP.NET CORE项目,为项目添加log4net程序包,

  ASP.NET Core使用log4net记录日志_第1张图片

 

  并添加log4net.config文件,

  ASP.NET Core使用log4net记录日志_第2张图片

 log4net.config文件配置如下:(log4net的具体配置我就不讲了,博客园里很多)



  
  
    
      
      
      
      
      
      
      
      
        
      
    
    
    
    
      
      
    

  

  接下来编写一个记录日志的公共类代码如下:(本人看到有些开发者将ILog对象直接返回,在调用的时候直接调用ILog对象的方法,这样会造成调用的类库中都必须引用log4net类库,很麻烦,像如下封装后调用的地方只需要引用Logger类所在类库即可)

public class Logger
    {
        private static ILog logger;
        static Logger()
        {
            if (logger == null)
            {
                var repository = LogManager.CreateRepository("NETCoreRepository");
                //log4net从log4net.config文件中读取配置信息
                XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
                logger = LogManager.GetLogger(repository.Name, "InfoLogger");
            }
        }

        /// 
        /// 普通日志
        /// 
        /// 
        /// 
        public static void Info(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Info(message);
            else
                logger.Info(message, exception);
        }

        /// 
        /// 告警日志
        /// 
        /// 
        /// 
        public static void Warn(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Warn(message);
            else
                logger.Warn(message, exception);
        }

        /// 
        /// 错误日志
        /// 
        /// 
        /// 
        public static void Error(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Error(message);
            else
                logger.Error(message, exception);
        }
    }

  接下来就是在任意控制器或者类中使用刚编写的Logger类来记录日志到文件中

        [HttpPost("list")]
        public async Task CarList()
        {
            var msg = await service.GetCarList(Request);
            Logger.Info(JsonConvert.SerializeObject(msg));//此处调用日志记录函数记录日志
            return Json(msg);
        }

  记录的日志在Log文件目录中:

ASP.NET Core使用log4net记录日志_第3张图片

打开文件查看日志内容如下所示:

ASP.NET Core使用log4net记录日志_第4张图片

 

 如果需要限制历史日志文件保存最大数量,请将改为:,此时,maxSizeRollBackups配置才会生效。

修改后的log4net.config内容如下:

"1.0" encoding="utf-8" ?>

  
  
    "RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      "Log/" />
      "true" />
      "Size" />
      "false" />
      "yyyyMMdd'.log'" />
      "10" />
      "50MB" />
      "log4net.Layout.PatternLayout">
        "%date  [%thread]  %-5level  %message%newline" />
      
    
    
    
    
      "ALL" />
      ref ref="RollingLogFileAppender" />
    

  

 

注意,如果Logger类中抛出FileNotFoundException异常,说明目录下未找到log4net.config文件,这时请在项目log4net.config文件上右键——属性——将“复制到输出目录”项的值改为“始终复制”即可。

你可能感兴趣的:(ASP.NET Core使用log4net记录日志)