NETCORE - 日志插件 Log4Net

NETCORE - 日志插件 Log4Net

安装nuget包:

Microsoft.Extensions.Logging.Log4Net.AspNetCore

 

 

方式一

1.  Program.cs文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace NETCORE.Log4Net1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //CreateWebHostBuilder启动了Kestrel服务器,
            //这个服务器负责监听--转发--响应客户端请求
            //(这样就不需要IIS来负责监听,转发,响应客户端请求了,IIS就只做反向代理就行了)    
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
             WebHost.CreateDefaultBuilder(args)
                   .ConfigureLogging((context, loggingbuilder) =>
                   {
                       //该方法需要引入Microsoft.Extensions.Logging名称空间
                       loggingbuilder.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
                       loggingbuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志

                       //添加Log4Net
                       //var path = Directory.GetCurrentDirectory() + "\\log4net.config"; 
                       //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径
                       loggingbuilder.AddLog4Net();
                   })
                   .UseStartup<Startup>();

    }
}
View Code

 

 

2.  log4net.config文件 

文件位置可在program.cs的CreateWebHostBuilder方法中指定,样例为项目跟目录。

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
    <!--指定日志文件保存的目录,目录可不在项目中-->
    <!--<file value="d:\\AAlog\log.txt"/>-->
    <file value="log\log.txt"/>
    <!--追加日志内容-->
    <appendToFile value="true"/>
    <!--可以为:Once|Size|Date|Composite-->
    <!--Compoosite为Size和Date的组合-->
    <rollingStyle value="Composite"/>
    <!--设置为true,当前最新日志文件名永远为file字节中的名字-->
    <staticLogFileName value="false"/>
    <!--当备份文件时,备份文件的名称及后缀名-->
    <datePattern value="yyyyMMdd.TXT"/>
    <!--日志最大个数-->
    <!--rollingStyle节点为Size时,只能有value个日志-->
    <!--rollingStyle节点为Composie时,每天有value个日志-->
    <maxSizeRollBackups value="20"/>
    <!--可用的单位:KB|MB|GB-->
    <maximumFileSize value="5MB"/>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ALL"/>
      <param name="LevelMax" value="FATAL"/>
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
  </appender>
  <root>
    <priority value="ALL"/>
    <level value="ALL"/>
    <appender-ref ref="RollingAppender"/>
  </root>
</log4net>
View Code

 

 

3. webapi调用

创建TestController控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using log4net.Core;
//using log4net.Repository.Hierarchy;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace NETCORE.Log4Net1.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {

        public ILoggerFactory _loggerFactory = null;
        public ILogger<TestController> _logger = null;



        public TestController(ILoggerFactory loggerFactory, ILogger<TestController> logger)
        {
            this._loggerFactory = loggerFactory;
            this._logger = logger;
        }


        [Route("get1")]
        [HttpGet]
        public IActionResult Get1()
        {
            this._loggerFactory.CreateLogger<TestController>().LogError("loggerFactory - 这里出了一个错误!");

            this._logger.LogError("logger - 这里出出现了一个错误!");

            return Ok("日志测试!");
        }
    }
}
View Code

 

 

4. 查看日志

 

 

 

 

 

 

 

方式二

Startup文件

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
            loggerRepository = LoggerManager.CreateRepository("NetCoreApp"); //我的项目名称叫NetCoreApp

            //指定配置文件
            XmlConfigurator.Configure(loggerRepository, new FileInfo("log4net.config"));
        }


        //为StartUp.cs添加属性
        public static ILoggerRepository loggerRepository { get; set; }

 

 

 log4net.config

在项目跟目录下创建

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <log4net>
    <appender name="RollingAppender" type="log4net.Appender.RollingFileAppender">
      <!--指定日志文件保存的目录,目录可不在项目中-->
      <!--<file value="d:\\AAlog\log.txt"/>-->
      <file value="log\log.txt"/>
      <!--追加日志内容-->
      <appendToFile value="true"/>
      <!--可以为:Once|Size|Date|Composite-->
      <!--Compoosite为Size和Date的组合-->
      <rollingStyle value="Composite"/>
      <!--设置为true,当前最新日志文件名永远为file字节中的名字-->
      <staticLogFileName value="false"/>
      <!--当备份文件时,备份文件的名称及后缀名-->
      <datePattern value="yyyyMMdd.TXT"/>
      <!--日志最大个数-->
      <!--rollingStyle节点为Size时,只能有value个日志-->
      <!--rollingStyle节点为Composie时,每天有value个日志-->
      <maxSizeRollBackups value="20"/>
      <!--可用的单位:KB|MB|GB-->
      <maximumFileSize value="5MB"/>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ALL"/>
        <param name="LevelMax" value="FATAL"/>
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
      </layout>
    </appender>
    <root>
      <priority value="ALL"/>
      <level value="ALL"/>
      <appender-ref ref="RollingAppender"/>
    </root>
  </log4net>
</configuration> 
View Code

 

 

 创建 testController webapi控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using log4net;
using log4net.Repository.Hierarchy;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace NETCORE.Log4Net2.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        private ILog log;

        public TestController()
        {
            this.log = LogManager.GetLogger(Startup.loggerRepository.Name,typeof(TestController));
        }


        [Route("Get1")]
        [HttpGet]
        public IActionResult Get1()
        {
            this.log.Error("这里出现了一个错误");

            return new JsonResult(new { aaa="哈哈,test!"});
        }

    }
}
View Code

 

 

运行后,可查看生成的日志文件

 

 

 .net6 中使用 log4net 日志 

 1. 项目根目录下 创建 log4net.config 文件

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <!--根配置-->
  <root>
    <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
    <level value="ERROR"/>
    <level value="WARN"/>
    <level value="INFO"/>
    <level value="DEBUG"/>
    <appender-ref ref="ErrorLog" />
    <appender-ref ref="WarnLog" />
    <appender-ref ref="InfoLog" />
    <appender-ref ref="DebugLog" />
  </root>
  <!-- 错误 Error.log-->
  <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
    <!--目录路径,可以是相对路径或绝对路径-->
    <param name="File" value="../../../log4"/>
    <!--文件名,按日期生成文件夹-->
    <param name="DatePattern" value="/yyyy-MM-dd/'error.log'"/>
    <!--追加到文件-->
    <appendToFile value="true"/>
    <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
    <rollingStyle value="Composite"/>
    <!--写到一个文件-->
    <staticLogFileName value="false"/>
    <!--单个文件大小。单位:KB|MB|GB-->
    <maximumFileSize value="200MB"/>
    <!--最多保留的文件数,设为"-1"则不限-->
    <maxSizeRollBackups value="-1"/>
    <!--日志格式-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
    </filter>
  </appender>

  <!-- 警告 Warn.log-->
  <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
    <!--目录路径,可以是相对路径或绝对路径-->
    <param name="File" value="../../../log4"/>
    <!--文件名,按日期生成文件夹-->
    <param name="DatePattern" value="/yyyy-MM-dd/'warn.log'"/>
    <!--追加到文件-->
    <appendToFile value="true"/>
    <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
    <rollingStyle value="Composite"/>
    <!--写到一个文件-->
    <staticLogFileName value="false"/>
    <!--单个文件大小。单位:KB|MB|GB-->
    <maximumFileSize value="200MB"/>
    <!--最多保留的文件数,设为"-1"则不限-->
    <maxSizeRollBackups value="-1"/>
    <!--日志格式-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="WARN" />
      <param name="LevelMax" value="WARN" />
    </filter>
  </appender>

  <!-- 信息 Info.log-->
  <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
    <!--目录路径,可以是相对路径或绝对路径-->
    <param name="File" value="../../../log4"/>
    <!--文件名,按日期生成文件夹-->
    <param name="DatePattern" value="/yyyy-MM-dd/'info.log'"/>
    <!--追加到文件-->
    <appendToFile value="true"/>
    <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
    <rollingStyle value="Composite"/>
    <!--写到一个文件-->
    <staticLogFileName value="false"/>
    <!--单个文件大小。单位:KB|MB|GB-->
    <maximumFileSize value="200MB"/>
    <!--最多保留的文件数,设为"-1"则不限-->
    <maxSizeRollBackups value="-1"/>
    <!--日志格式-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
    </filter>
  </appender>

  <!-- 调试 Debug.log-->
  <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
    <!--目录路径,可以是相对路径或绝对路径-->
    <param name="File" value="../../../log4"/>
    <!--文件名,按日期生成文件夹-->
    <param name="DatePattern" value="/yyyy-MM-dd/'debug.log'"/>
    <!--追加到文件-->
    <appendToFile value="true"/>
    <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
    <rollingStyle value="Composite"/>
    <!--写到一个文件-->
    <staticLogFileName value="false"/>
    <!--单个文件大小。单位:KB|MB|GB-->
    <maximumFileSize value="200MB"/>
    <!--最多保留的文件数,设为"-1"则不限-->
    <maxSizeRollBackups value="-1"/>
    <!--日志格式-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%d{HH:mm:ss}]%m%n"/>
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="DEBUG" />
    </filter>
  </appender>

</log4net>

 

 

 

 

2. 注入 program.cs 中(注意:文件需要配置属性-> 复制到输出目录

//日志 注入Log4Net
builder.Services.AddLogging(cfg =>
{
    cfg.AddLog4Net();
    //默认的配置文件路径是在根目录,且文件名为log4net.config
    //如果文件路径或名称有变化,需要重新设置其路径或名称
    //比如在项目根目录下创建一个名为cfg的文件夹,将log4net.config文件移入其中,并改名为log.config
    //则需要使用下面的代码来进行配置
    //cfg.AddLog4Net(new Log4NetProviderOptions()
    //{
    //    Log4NetConfigFileName = "cfg/log.config",
    //    Watch = true
    //});
});

//1.过滤掉系统默认的一些日志
//2.这里配置后,appsettings.json中的Logging配置将失效
builder.Logging.AddFilter("System", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("Microsoft", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("Microsoft.Hosting.Lifetime", LogLevel.Error); //只有错误时才打印日志
builder.Logging.AddFilter("MyShopApi", LogLevel.Debug); //自定义项目过滤级别,使用项目命名空间

 

 

 

 3. 接口中使用:

    public class ResourceOwnerPasswordValidator
    {  public ILogger<ResourceOwnerPasswordValidator> logger;

        public ResourceOwnerPasswordValidator(ILogger<ResourceOwnerPasswordValidator> _logger)
        { this.logger = _logger;
        }
        

     public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) {

        logger.LogError("logger - 这里出出现了一个错误!");
        logger.LogInformation("logger - 这里出现一个信息!");
        logger.LogDebug("logger - 这里出现一个信息!");
        logger.LogWarning ("logger - 这里出出现了一个warning!");

    }
}

 

 

 

 

 

 

 

 

 

 


项目:NETCORE.Log4Net1

项目:NETCORE.Log4Net2
附代码:https://gitee.com/wuxincaicai/NETCORE.git

引用:https://blog.csdn.net/Fanbin168/article/details/89454051

 

posted @ 2020-06-10 09:12  无心々菜  阅读(401)  评论(0编辑  收藏  举报