实现了上述两个接口,即可通过factory的AddProvider方法,将该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数据库。








