我有引用多个库(核心、标准)的 ac# 项目。每个库都以下列方式使用 log4net:
public class LibOne
{
private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public LibOne()
{
Log.Debug("ctor called");
}
}
主工程配置Logger:
XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetEntryAssembly()),
new FileInfo($"{AppDomain.CurrentDomain.BaseDirectory}\\log4net.config"));
层次结构如下所示:
MainProject
|
+---------+---------+
LibOne LibTwo LibThree
| |
| +---------+
+---------+ LibSix LibSeven
LibFour LibFive
好的,通过上述设置,我可以看到每个库的日志条目。
现在这些库应该现代化并变得更加通用,以便消费者可以决定他最喜欢的记录器(例如 NLog、Console 等)。因此我想使用Microsoft.Logging.Extensions
. 我已经阅读了很多文档、指南、提示等,并发现这ILoggerFactory
可能是最好的开始方式,但是
- 没有人解释,如何使用
ILogger
多层以及如何在消费项目中配置记录器, - 几乎我发现的每个示例都在 DI 的构造函数中添加了
ILogger
/ILogger<T>
参数,但我无法更改每个库的构造函数的签名。有没有办法以不同的方式做到这一点? - 我读过一些关于
autofac
但没有完全理解的东西。也许我可以用它来定义我想在日志文件中看到哪些类型/库?
UPD 1 是否有可能更改库代码并以与 log4net 相同的方式处理它,但使用未指定的 logprovider,例如
public class LibOne
{
private static readonly ILogger<LibOne> Log = new LoggerFactory().CreateLogger<LibOne>(); //does this make sense?
public LibOne()
{
Log.LogDebug("ctor called");
}
}
那么如何在我的主项目中配置记录器(例如 log4net 或调试控制台)?我以后可以添加提供者吗?
很抱歉这些问题,但微软关于超出 asp.net 范围(并且没有 DependencyService)的日志记录扩展的文档真的很差。