我很好奇以下行如何在程序集中配置 log4net:
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
我猜这会在运行时调用“main()”之前的某个时候被调用,但是什么时候会发生,这意味着什么?是否有其他框架/库使用此程序集属性来加载这样的初始上下文?与在 main() 中调用“配置”方法相比,做这样的事情有什么优点/缺点吗?
我很好奇以下行如何在程序集中配置 log4net:
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
我猜这会在运行时调用“main()”之前的某个时候被调用,但是什么时候会发生,这意味着什么?是否有其他框架/库使用此程序集属性来加载这样的初始上下文?与在 main() 中调用“配置”方法相比,做这样的事情有什么优点/缺点吗?
这样做的好处是代码在主代码之前和静态初始化之前初始化。
例如,这意味着您可以在静态构造函数中使用 log4net 日志记录。如果没有预初始化 log4net 的方法,在静态构造函数中,您永远无法确定代码是否已正确初始化。
这个区域似乎没有很好的文档记录(或者无论如何都不容易找到),但我假设调用方法的初始化是在程序集加载时执行的。
“我猜这会在运行时调用“main()”之前的某个时候被调用,但是什么时候会发生,这意味着什么?
根据log4net 文档:
使用属性可以更清晰地定义应用程序的配置将从何处加载。不过值得注意的是,属性是纯被动的。它们只是信息。因此,如果您使用配置属性,您必须调用 log4net 以允许它读取属性。
所以我想你仍然必须调用XmlConfigurator.Configure()
方法或LogManager.getLogger()
.