因此,为了给出一些上下文,因为这总是有帮助的,我们正在使用LightInject和Log4Net以及Common.Logging。如果我们将记录器初始化为:
public static ILog Logger = LogManager.GetLogger<someType>();
记录器在第一次实例化类时(通过LightInject)工作,并且在此之后似乎永远不会记录(或者它甚至可能不是第一次记录,有时很难说)。
如果我们将该行更改为此(注意细微差别),它始终有效。
public static readonly ILog Logger = LogManager.GetLogger<someType>();
所以......我得到一个静态readonly只能为类初始化设置一次,并且可以像我们一样或在静态构造函数中设置。但是如果我们不把它变成只读的话,它为什么会“失去”记录器呢?
答案 0 :(得分:0)
将您的变量转换为属性
private static ILog _logger = LogManager.GetLogger<someType>();
public static ILog Logger {
get{return _logger;}
set {_logger=value;}
}
然后将breakpoint
放在set
行
当应用程序中断时,会看到调用堆栈
添加更多信息:
_logger
变量放在监视窗口中。 make object id
; #1
添加到您的观察列表中。如果以后_logger
停止引用#1,则表示它已更改!