如何在 .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 框架的简单应用程序,通过使用 Log4Net 将信息记录到文件NLogSeriLog。对于使用下面的简单代码及其工作正常的情况。

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()
};

当然这意味着您的应用程序应该引用所有的 nugets,但这应该不是问题。