是否无法根据使用的记录器来定位不同的日志记录提供程序? 例如,请参阅以下代码: // Establish loggersvar someLogger = loggerFactory.CreateLogger("SomeLogger");var anotherLogger = loggerFactory.CreateLogger("
例如,请参阅以下代码:
// Establish loggers var someLogger = loggerFactory.CreateLogger("SomeLogger"); var anotherLogger = loggerFactory.CreateLogger("AnotherLogger"); // Hook up providers (but not at the individual logger's level??) loggerFactory.AddDebug(minimumLevel: LogLevel.Debug); loggerFactory.AddConsole(minimumLevel: LogLevel.Debug); loggerFactory.AddBlob(connectionString, minimumLevel: LogLevel.Information); // Log stuff someLogger.LogError("Logging with someLogger"); anotherLogger.LogError("Logging with anotherLogger");
无论使用哪种记录器,所有提供者都将在此处记录.
这真的不可能吗?如果所有记录器都记录到每个提供者,那么定义单独的记录器有什么意义呢?
我不确定这是否可行,但您可以做的是将不同日志级别的日志消息记录到不同的提供商.以下示例使用SourceSwitch API将所有警告级别消息及更高级别消息记录到事件日志中.这里可能满足您需求的用例是您可能不希望信息或调试消息填满您的事件日志.private static void ConfigureLogging(ILoggerFactory loggerFactory) { var sourceSwitch = new SourceSwitch("EventLog"); sourceSwitch.Level = SourceLevels.Warning; loggerFactory.AddTraceSource(sourceSwitch, new EventLogTraceListener("Application")); }
UPDATE
ASP.NET 5目前的示例非常简单,但ILoggerFactory上的AddProvider方法用于添加特定于它的自定义提供程序:
/// <summary> /// Used to create logger instances of the given name. /// </summary> public interface ILoggerFactory : IDisposable { /// <summary> /// The minimum level of log messages sent to registered loggers. /// </summary> LogLevel MinimumLevel { get; set; } /// <summary> /// Creates a new ILogger instance of the given name. /// </summary> /// <param name="categoryName"></param> /// <returns></returns> ILogger CreateLogger(string categoryName); void AddProvider(ILoggerProvider provider); }
所以你可以创建另一个ILoggerFactory但注册不同的提供者.然后根据您要登录的位置将正确的ILoggerFactory注入到类中.