天天看點

NetCore3.1——內建Log4Net

1,添加程式集: Microsoft.Extensions.Logging.Log4Net.AspNetCore

2,配置: 在項目根目錄下建立配置log4net.config配置檔案

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <!-- Define some output appenders -->
  <appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
    <file value="f:\log\log.txt" />
    <!--追加日志内容-->
    <appendToFile value="true" />
    <!--防止多線程時不能寫Log,官方說線程非安全-->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <!--可以為:Once|Size|Date|Composite-->
    <!--Composite為Size和Date的組合-->
    <rollingStyle value="Composite" />
    <!--當備份檔案時,為檔案名加的字尾-->
    <datePattern value="yyyyMMdd.txt" />
    <!--日志最大個數,都是最新的-->
    <!--rollingStyle節點為Size時,隻能有value個日志-->
    <!--rollingStyle節點為Composite時,每天有value個日志-->
    <maxSizeRollBackups value="20" />
    <!--可用的機關:KB|MB|GB-->
    <maximumFileSize value="5MB" />
    <!--置為true,目前最新日志檔案名永遠為file節中的名字-->
    <staticLogFileName value="true" />
    <!--輸出級别在INFO和ERROR之間的日志-->
    <!--過濾級别 FATAL > ERROR > WARN > INFO > DEBUG-->
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="WARN" />
      <param name="LevelMax" value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger -  %message%newline"/>
    </layout>
  </appender>
  <root>
    <priority value="ALL"/>
    <level value="ALL"/>
    <appender-ref ref="rollingAppender" />
  </root>
</log4net>
           

3,C#代碼

配置方式1:

namespace Log4netTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging((context, logBuilder) =>
                {
                    logBuilder.AddFilter("System", LogLevel.Warning);//過濾掉系統預設的一些日志
                    logBuilder.AddFilter("Microsoft", LogLevel.Warning);//過濾掉系統預設的一些日志
                    logBuilder.AddLog4Net(); //注入log4net
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

           

配置方式2:

namespace Log4netTest
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory logger)
        {
        	logger.AddLog4Net();
        }
    }
}
           

調用測試:

namespace Log4netTest.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            _logger.LogError("2222222222222222222222222222");
            return View();
        }
    }
}
           

繼續閱讀