没有插入 log4net 汇编语句的日志输出 - 为什么
本文关键字:日志 输出 为什么 语句 插入 log4net 汇编 | 更新日期: 2023-09-27 18:31:11
在我的项目中,我有一个在内部使用 log4net 的 DLL 引用。在我的Main
课上,我插入了以下两个语句:
using log4net;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
我还准备了一个App.Conf
文件。
仅使用上述操作,日志记录不会启动。但是当我另外添加语句时
private static readonly ILog log = LogManager.GetLogger(typeof(Main));
到我的Main
课,日志记录开始并且一切正常。
为什么必须创建 ILog
对象才能触发日志记录才能启动?带有我的App.Conf
文件的汇编语句不应该足够吗?
LogManager.GetLogger
第一次运行时,它会尝试确定 log4net 的配置方式。它通过在当前程序集中查找 log4net 属性来实现此目的。
如果您没有在程序集中创建记录器,那么第一次创建记录器时将从您引用的 dll 开始,因此 log4net 将在该 dll 中查找 log4net 属性,但找不到它,因此您的配置将被忽略。
通过包含行
private static readonly ILog log = LogManager.GetLogger(typeof(Main));
在您的主应用程序中,此方法从您的 exe 运行,log4net 将在您的 exe 中查找该属性,这次它会找到该属性,然后继续加载正确的配置。
据我了解,此配置仅在第一次调用 GetLogger 时发生,因此确保首先从主应用程序调用 GetLogger 非常重要。
我几乎总是使用:
private static readonly NLog.Logger log = LogManager.GetCurrentClassLogger();
这使您不必执行(typeof(Main)),您可以将其剪切并粘贴到任何需要日志记录的文件中。
我很困惑您如何尝试在不创建"log"对象的情况下调用日志记录。 你想做什么?
我可能只使用上面给出的代码行。