ASP.NET Core中使用Log4net

  1. 在ASP.NET Core中依赖注入的方式(非LogManager.GetLogger)使用log4net;
  2. Nuget安装2个程序包:log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore(这个包实现了ILogger和ILoggerProvider这2个接口,.NET Framework不用引用这个程序包);
    在这里插入图片描述
  3. 新增配置文件,网上很多配置样本,我的是每天一个日志文件,以“LOG/年/月”做目录,以当天日期命名日志文件;
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
	<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
		<!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
		<param name="File" value="Log\\" />
		<!--日志输出到exe程序这个相对目录下-->
		<param name="AppendToFile" value="true" />
		<!--输出的日志不会覆盖以前的信息-->
		<param name="MaxSizeRollBackups" value="100" />
		<!--备份文件的个数-->
		<param name="MaxFileSize" value="10240" />
		<!--当个日志文件的最大大小-->
		<param name="StaticLogFileName" value="false" />
		<!--是否使用静态文件名-->
		<param name="DatePattern" value="yyyy\\yyyyMM\\yyyyMMdd'.txt'" />
		<!--日志路径和文件名-->
		<param name="RollingStyle" value="Date" />
		<!--文件创建的方式,这里是以Date方式创建-->
		<!--错误日志布局-->
		<layout type="log4net.Layout.PatternLayout">
			<!--
			输出样式:
			%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 
			%n(new line):换行 
			%d(datetime):输出当前语句运行的时刻 
			%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 
			%t(thread id):当前语句所在的线程ID 
			%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 
			%c(class):当前日志对象的名称,例如: 
			%f(file):输出语句所在的文件名。 
			%l(line):输出语句所在的行号。 
			%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。			
			-->

			<!--每条日志末尾的文字说明-->
			<!--输出格式-->
			<!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
			<conversionPattern value="%n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />

			<!--  <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
 -->
		</layout>
	</appender>

	<root>
		<priority value="ALL"/>
		<level value="ALL"/>
		<appender-ref ref="rollingAppender" />
	</root>

  1. 在Program.cs里为HostBuilder配置Log4net
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureLogging(log =>
            {
                log.ClearProviders();//清除
                //过滤掉System和Microsoft开头的命名空间下的组件产生的警告级别以下的日志
                log.AddFilter("System", LogLevel.Warning);
                log.AddFilter("Microsoft", LogLevel.Warning);

                //注册log4net中间件
                log.AddLog4Net("CFGFiles/log4net.config");
            }).ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
  1. 在Home控制器里依赖注入并使用
    public class HomeController : Controller
    {
        private readonly ILogger _Log;
        public HomeController(ILogger<HomeController> logger)
        {
            //Core自带的容器 IServiceCollection 会自动依赖注入的
            this._Log = logger;
        }
        public IActionResult Index()
        {
            _Log.LogInformation($"日志记录 LogInformation:{this.GetType()}");
            return View();
        }
    }
  1. 结果截图
    在这里插入图片描述
posted @ 2020-10-07 16:44  邹蕾  阅读(200)  评论(0编辑  收藏  举报