Log4Net相信大家都很熟悉了,算是比較主流和著名的日志組件了,
- 官網:http://logging.apache.org
- 開源地址:https://github.com/apache/logging-log4net
最佳實踐
在專案中添加組件包
Install-Package log4net
添加log4net.config檔案
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net debug="false">
<appender name="info" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="https://www.cnblogs.com/meowv/p/log4net/info/" />
<param name="AppendToFile" value="https://www.cnblogs.com/meowv/p/true" />
<param name="MaxSizeRollBackups" value="https://www.cnblogs.com/meowv/p/-1"/>
<param name="MaximumFileSize" value="https://www.cnblogs.com/meowv/p/5MB"/>
<param name="RollingStyle" value="https://www.cnblogs.com/meowv/p/Composite" />
<param name="DatePattern" value="https://www.cnblogs.com/meowv/p/yyyyMMdd//HH".log"" />
<param name="StaticLogFileName" value="https://www.cnblogs.com/meowv/p/false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="https://www.cnblogs.com/meowv/p/%n
{
"system": "Meowv.Blog",
"datetime": "%d",
"description": "%m",
"level": "%p",
"info": "%exception"
}" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="https://www.cnblogs.com/meowv/p/INFO" />
<levelMax value="https://www.cnblogs.com/meowv/p/INFO" />
</filter>
</appender>
<appender name="error" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="https://www.cnblogs.com/meowv/p/log4net/error/" />
<param name="AppendToFile" value="https://www.cnblogs.com/meowv/p/true" />
<param name="MaxSizeRollBackups" value="https://www.cnblogs.com/meowv/p/-1"/>
<param name="MaximumFileSize" value="https://www.cnblogs.com/meowv/p/5MB"/>
<param name="RollingStyle" value="https://www.cnblogs.com/meowv/p/Composite" />
<param name="DatePattern" value="https://www.cnblogs.com/meowv/p/yyyyMMdd//HH".log"" />
<param name="StaticLogFileName" value="https://www.cnblogs.com/meowv/p/false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="https://www.cnblogs.com/meowv/p/%n
{
"system": "Meowv.Blog",
"datetime": "%d",
"description": "%m",
"level": "%p",
"info": "%exception"
}" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="https://www.cnblogs.com/meowv/p/ERROR" />
<levelMax value="https://www.cnblogs.com/meowv/p/ERROR" />
</filter>
</appender>
<root>
<level value="https://www.cnblogs.com/meowv/p/ALL"></level>
<appender-ref ref="info"/>
<appender-ref ref="error"/>
</root>
</log4net>
</configuration>
控制臺專案
using log4net;
using log4net.Config;
using System;
using System.IO;
using System.Reflection;
namespace ConsoleAppDemo
{
class Program
{
static void Main(string[] args)
{
var log4netRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(log4netRepository, new FileInfo("log4net.config"));
ILog log = LogManager.GetLogger(log4netRepository.Name, "NETCorelog4net");
log.Info("NETCorelog4net log");
log.Info("test log");
log.Error("error");
log.Info("linezero");
Console.ReadKey();
}
}
}

AspNetCore專案
新建一個靜態類,寫一個擴展方法UseLog4Net(),用于log4net初始化,
public static class Log4NetExtensions
{
public static IHostBuilder UseLog4Net(this IHostBuilder hostBuilder)
{
var log4netRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(log4netRepository, new FileInfo("log4net.config"));
return hostBuilder;
}
}
擴展方法回傳IHostBuilder物件,這樣可以鏈式呼叫,美化代碼,然后在Program.cs中使用擴展方法UseLog4Net(),
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace WebAppDemo
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseLog4Net();
}
}
配置完成,然后在任意地方寫入日志即可,
using log4net;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace WebAppDemo.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILog _log;
public WeatherForecastController()
{
_log = LogManager.GetLogger(typeof(WeatherForecastController));
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_log.Info("Hello, this is a Weather api!");
_log.Warn("Wran !!!");
_log.Error("Controller Error");
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/118149.html
標籤:.NET Core
上一篇:C#桌面程式啟動時傳入引數
