Created Log4Net 日志集成到 ILogger (markdown)

ansonzhang 2019-12-11 13:07:39 +08:00
parent 3853228225
commit 322bf13d4c

@ -0,0 +1,125 @@
## 在api层内容根目录添加 config 文件
```
Blog.Core
├─ Controllers
│ └─ WeatherForecastController.cs
├─ Log4net.config // 就是这里
├─ Program.cs
├─ Properties
│ └─ launchSettings.json
├─ Startup.cs
├─ appsettings.Development.json
└─ appsettings.json
```
config 的内容是:
```
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Log/" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="&quot;GlobalExcepLogs_&quot;yyyyMMdd&quot;.log&quot;" />
<!-- 当将日期作为日志文件的名字时必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date| %newline%message%newline--------------------------------%newline" />
<!-- 这里也可以直接用json格式输出具体请自行百度 -->
</layout>
</appender>
<root>
<!-- 控制级别由低到高ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO则INFO级别向下的级别比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值则缺省为DEBUG -->
<level value="ALL" />
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender-ref ref="RollingFileAppenderNameByDate" />
</root>
</log4net>
```
## 引用 nuget 包
```
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.0.3" />
</ItemGroup>
```
## Program.cs 创建服务
```
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead("Log4net.config"));//注意名字
var repo = log4net.LogManager.CreateRepository(
Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
```
## 配置中间件,接管 ILogger
```
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// 就是这里
loggerFactory.AddProvider(new Log4NetProvider("Log4net.config"));
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
```
## 控制器注入
```
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogError("this is an error.");
var rng = new Random();
return null;
}
```