簡體   English   中英

如何在.Net Core 中使用不同的第三方記錄器登錄到文件? 第三方記錄器可能會在應用程序啟動時動態更改

[英]How to log to a file using different third party logger in .Net Core? Third party logger may change dynamically when application starts

開發使用Microsoft.Extensions.Logging框架的簡單應用程序,使用Log4NetNLogSeriLog將信息記錄到文件中。 為此,使用下面的簡單代碼及其工作正常。

var factory = new LoggerFactory().AddLog4Net();
//var factory = new LoggerFactory().AddNLog();
//var factory = new LoggerFactory().AddSerilog();
ILogger logger = factory.CreateLogger<Program>();
logger.Log(LogLevel.Debug, "Some message to log");

要使上述示例正常工作,我需要在示例應用程序中添加NLog.Extensions.LoggingSerialog.Extensions.LoggingMicrosoft.Extensions.Logging.Log4Net.AspNetCore

我的問題是,需要在不參考上述 Nuget 包的情況下通用地構建我的示例應用程序,並且根據客戶的需求,他們可以使用或配置 NLog 或 SeriLog 第三方進行日志記錄,這將由運行時的一些配置文件決定。

無需再次編譯我的應用程序,我需要允許客戶使用所需的第三方框架。 我的應用程序應該使用配置文件中提到的相應框架從配置文件中讀取並將日志寫入文件。

希望您能清楚地理解我的要求,在此先感謝。

在這種情況下,日志記錄不是“外部工具”,它是應用程序的一部分。 這就是為什么您不能實現“通用”日志記錄的原因,您必須將其編譯到您的應用程序中。 但你不僅限於一個。 您可以編譯所有三個,並在啟動期間根據配置初始化您需要的一個

var factory = Configuration["LoggingSystem"] switch
{
    "log4net" => loggerFactory.AddLog4Net(),
    "nlog" => loggerFactory.AddNLog(),
    ...
    _ => throw new Exception()
};

當然,這意味着您的應用程序應該引用所有的 nuget,但這應該不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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