Log4Net相信大家都很熟悉了,算是比较主流和著名的日志组件了。

官网:http://logging.apache.org

开源地址:https://github.com/apache/logging-log4net

最佳实践

在项目中添加组件包

Install-Package log4net

添加log4net.config文件

控制台项目

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();

}).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 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();

}

}

}

查看原文