【发布时间】:2019-07-13 02:39:08
【问题描述】:
我在我的项目中使用 Microsoft.Extensions.DependencyInjection,并希望使用 Microsoft.Extension.Logging,并将 NLog 作为实际的日志框架。
因为我希望能够以编程方式决定启动时的日志配置(以解决路径问题),所以我正在做这样的事情:
var config = new LoggingConfiguration();
var dirPath = Path.Combine(publicStorage, "Test");
var logFileTarget = new NLog.Targets.FileTarget()
{
CreateDirs = true,
FileName = Path.Combine(dirPath, "test.log"),
FileNameKind = NLog.Targets.FilePathKind.Absolute,
Layout = "${date}|${level:uppercase=true}|${message} ${exception}|${logger}|${all-event-properties}",
Name = "FileLog",
};
//Add Logging Targets
config.AddTarget(logFileTarget);
//Add Rules
config.AddRuleForAllLevels(logFileTarget, "*", false);
LogManager.Configuration = config;
但这不会配置ServiceProvider.GetService<ILogger<T>> 返回的那些记录器。
但是,如果我使用 LogManager.GetLogger("TestLogger"),则日志记录的配置符合预期。
LogManager.ReconfigExistingLoggers(); 也没有解决问题,我的搜索结果为空
编辑
DI 设置如下所示:
return new ServiceCollection()
// Configure Logging Provider
.AddLogging(builder =>
{
builder.AddDebug();
//Add NLog
builder.AddNLog(new NLogProviderOptions()
{
CaptureMessageTemplates = true,
CaptureMessageProperties = true,
});
})
... // Registering additional dependencies
.BuildServiceProvider();
使用
LogManager.GetCurrentClassLogger会产生与 serviceProvider 返回的 Logger 相同的“错误行为”。自从 该规则是使用"*"设置的
最后这句话是错误的,它实际上是有效的,但是 i 消息不出现 ILogger 仍然存在
【问题讨论】:
-
请添加您的 DI 配置。
-
由于我已经脱离了概念,我已经扩展了我的问题中的信息,我希望这更有帮助,我现在暂停几分钟
-
记住丢失的
builder.SetMinimumLevel(LogLevel.Trace);另见维基:github.com/NLog/NLog.Extensions.Logging/wiki/… -
谢谢,就是这样。您能否将其发布为答案,以便我可以接受它作为正确的答案
标签: c# dependency-injection .net-core nlog