解读ASP.NET 5 & MVC6系列教程(9):日志框架

2019-05-22 14:18:16王旭

实现了上述两个接口,即可通过factoryAddProvider方法,将该provider添加到实例中,达到记录日志的目的。ASP.NET 5中目前的默认实现了4中日志记录Provider,分别是:Console、NLog、Serilog、Trace,注册这些Provider的时候,均可以使用扩展方法,实例如下:

loggerfactory.AddConsole()
loggerfactory.AddNLog(new NLog.LogFactory())
loggerfactory.AddSerilog(new LoggerConfiguration())
var testSwitch = new SourceSwitch("TestSwitch", "Level will be set to warning for this test");
factory.AddTraceSource(testSwitch, new ConsoleTraceListener());

ILogger的扩展方法

为了方便记录日志,微软在Microsoft.Framework.Logging.LoggerExtensions上,针对6个级别的日志记录均定义了6个如下形式的扩展方法,实例如下:

public static void LogInformation(this ILogger logger, string message)
public static void LogInformation(this ILogger logger, int eventId, string message)
public static void LogInformation(this ILogger logger, string format, params object[] args)
public static void LogInformation(this ILogger logger, int eventId, string format, params object[] args)
public static void LogInformation(this ILogger logger, ILogValues state, Exception error = null)
public static void LogInformation(this ILogger logger, int eventId, ILogValues state, Exception error = null)

// 其它Debug、Verbose、Warning、Error、Critical也都遵循LogXXXX()规则.

所以使用的时候,我们可以使用像LogDebug()、LogError()这样的方法来进行快速记录日志。另外,该类还为Warning、Error、Critical三个级别,又分别定义了2个扩展方法,示例如下:

public static void LogWarning(this ILogger logger, string message, Exception error)
public static void LogWarning(this ILogger logger, int eventId, string message, Exception error)

有些这些扩展方法,使用起来估计打遍天下无敌手了。

总结

通过基于接口的编程机制和DI依赖注入机制,我们可以很容易实现第三方日志provider的扩展,从而将日志记录到我们想记录的任意地方,如MongoDB等NoSQL数据库。