asp.net core中使用log4net

news/2024/7/7 12:00:10 标签: 测试, runtime

和之前的ASP.NET MVC中的使用LOG4NET的方法有些不同,这里先记录一下,使用步骤如下 :

1. 建立 ASP.NET CORE项目中,NUGET中搜索log4net后下载安装

2. 根目录建立 log4net.config文件,内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- This section contains the log4net configuration settings -->
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
    </appender>

    <!--<appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.log" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>-->

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="logfile/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>

    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="FileAppender" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>

  </log4net>
</configuration>


3. Startup.cs文件中的Startup方法和ConfigureServices方法里的AddMvc代码改下,核心代码如下,记得引用相应的命名空间:

        //log4net日志
        public static ILoggerRepository repository { get; set; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

            //加载log4net日志配置文件
            repository = LogManager.CreateRepository("NETCoreRepository");
            XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddMvc(options =>
            {
                options.Filters.Add<Models.HttpGlobalExceptionFilter>(); //加入全局异常类
            });
        }

4. Models文件夹中建立 HttpGlobalExceptionFilter.cs 类,用于全局异常后记录到日志中,内容代码如下 :

using log4net;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    /// <summary>
    /// 全局异常类
    /// </summary>
    public class HttpGlobalExceptionFilter : IExceptionFilter
    {
        private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));
        public void OnException(ExceptionContext context)
        {
            log.Error(context.Exception);
        }
    }
}

5. 下面是控制器的代码,有异常会自动记录下来,用那个log也能手工记录日志信息

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using log4net;
using Microsoft.AspNetCore.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        private ILog log = LogManager.GetLogger(Startup.repository.Name, typeof(HttpGlobalExceptionFilter));
        public IActionResult Index()
        {
            throw new Exception("牛腩自定义异常!!!");  //有异常则会记录到logfile文件夹中
            return View();
        }

        public IActionResult About()
        {
            ViewData["Message"] = "Your application description page.";
            log.Info("打开about页面了!!!"); //普通的记录日志
            return View();
        }
 
    }
}


http://www.niftyadmin.cn/n/1288092.html

相关文章

php的count函数怎么用,学习猿地-php中count函数的用法

php中count函数的用法&#xff1a;【count(array, mode)】&#xff0c;其中参数array规定要计数的数组&#xff0c;mode规定函数的模式。count函数用于返回数组中元素的数目。本文操作环境&#xff1a;windows10系统、php 7.3、thinkpad t480电脑。count() 函数返回数组中元素的…

python 大智慧股票行情数据_Python获取股票历史数据和收盘数据的代码实现

各种股票软件&#xff0c;例如通达信、同花顺、大智慧&#xff0c;都可以实时查看股票价格和走势&#xff0c;做一些简单的选股和定量分析&#xff0c;但是如果你想做更复杂的分析&#xff0c;例如回归分析、关联分析等就有点捉襟见肘&#xff0c;所以最好能够获取股票历史及实…

React Native也能玩区块链了

区块链天生具有的不可更改性和去中心化特性&#xff0c;使得开发许多令人惊叹的使用案例成为可能&#xff0c;例如自治组织、销售、社交网络、保险公司以及成百上千人之间的游戏。 近日&#xff0c;根据 dApp 白皮书介绍&#xff0c;相对于后端代码运行在集中的服务器的 App 而…

SVNKit学习——wiki+简介(二)

这篇文章是参考SVNKit官网在wiki的文档&#xff0c;做了个人的理解~ 首先抛出一个疑问&#xff0c;Subversion是做什么的&#xff0c;SVNKit又是用来干什么的&#xff1f; 相信一般工作过的同学都用过或了解过svn&#xff0c;不了解的同学可以到官网看下&#xff0c;这里不作为…

oracle 改表空间大小,oracle查询修改增加表空间大小

1.查询表空间使用情况&#xff1a;SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB *…

Linux标识进程

一、前言 其实两年前&#xff0c;本站已经有了一篇关于进程标识的文档&#xff0c;不过非常的简陋&#xff0c;而且代码是来自2.6内核。随着linux container、pid namespace等概念的引入&#xff0c;进程标识方面已经有了天翻地覆的变化&#xff0c;因此我们需要对这部分的内容…

oracle清理过期备份,【求助】:怎么设置oracle数据库的自动备份和删除过期备份?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼网上给的备份的命令不好用&#xff0c;如下&#xff1a;echo offcolor 0bmode con cols80 lines25echo 正在备份数据库&#xff0c;请稍后……echo --------------------------------------echo 指定数据库用户(在“”后面写入你需…

JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】...

1.PreparedStatement对象 PreparedStatement对象继承Statement对象&#xff0c;它比Statement对象更强大&#xff0c;使用起来更简单 Statement对象编译SQL语句时&#xff0c;如果SQL语句有变量&#xff0c;就需要使用分隔符来隔开&#xff0c;如果变量非常多&#xff0c;就会使…