簡體   English   中英

使用 NLog 的多個依賴注入容器時沒有 output

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM