我是log4net的新手,我正在尝试维护一些使用它的遗留代码。我注意到有两个静态类告诉log4net登录到不同的位置是相互绊倒的。
每个类都有一个看起来像这样的静态构造函数
static Logger() {
_Logger = new X.LoggingService.AppLogger(
X.UtilityServer.Configuration.ConfigInfo.LoggerConfigFile);
}
除了配置值不同外;这两个静态类都在初始化相同的AppLogger
辅助类。初始化的第二个类是覆盖第一个类的初始化。我想我已经把问题追到了这里:
private ILog Log {
get {
if (!_ConfiguratorSet) {
_ConfiguratorSet = true;
XmlConfigurator.Configure(new FileInfo(_ConfigFile)); //<--- STATIC
}
return _log;
}
}
由于我绝对不必支持线程安全性,我应该删除if语句吗?每次我需要记录某些内容时调用XmlConfigurator.Configure
会非常昂贵吗?有没有更好的办法?此代码是使用log4net 1.2.10版本编写的。
答案 0 :(得分:1)
理想情况下,将会发生的事情是:
代码
private ILog Log {
get {
if (!_ConfiguratorSet) {
_ConfiguratorSet = true;
XmlConfigurator.Configure(new FileInfo(_ConfigFile)); //<--- STATIC
}
return _log;
}
}
真是令人困惑和错误。你应该只在那里返回一个日志,所以根本没有 ifs 。这违反了单一责任原则,也可能是您看到错误的原因。