[英]No output when using multiple dependency injection containers with NLog
我已經通過依賴注入設置了 NLog,在一個地方,我注入記錄器是我的主要 Class Application
,在這個 class 中,我創建了我的套接字服務器的實例,在那里我有關於接受連接或錯誤等等的事件......這些事件在Application
中設置。
例如OnAccept
事件當然是由另一個線程處理的,監聽連接在哪里運行。 調用此事件時,所有 go 都應如此,但記錄器不會在日志中寫入任何內容。 如果我使用而不是記錄器Console.WriteLine()
,它會寫入所有內容,因此會正確調用此事件(即使通過調試也可以檢查)。
它是 NLog/ ILogger<>
中的東西,它不能從另一個線程寫入日志? 以及如何在這種情況下使用它?
所以,問題實際上是隱藏的,我使用 DI 創建多個范圍,所以通過這種方式創建是行不通的:
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog($"{ConfigBasePath}/{NlogConfig}");
});
有兩種解決方案,創建單個共享 NLogFactory,而不是為每個 DI 容器創建,使用 static LogManager 設置配置文件。 或者創建多個隔離的LogFactory,通過這段代碼:
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder =>
{
builder.ClearProviders();
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddNLog(serviceProvider => {
var logFactory = new NLog.LogFactory();
logFactory.LoadConfiguration($"{ConfigBasePath}/{NlogConfig}");
return logFactory;
});
});
我在NLog GitHub上的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.