C# 在log4net中启用两个不同位置的日志记录
我是log4net的新手,我正在尝试维护一些使用它的遗留代码。我注意到,有两个静态类告诉log4net要登录到不同的位置,这两个类互相绊倒了 每个类都有一个如下所示的静态构造函数C# 在log4net中启用两个不同位置的日志记录,c#,logging,log4net,log4net-configuration,C#,Logging,Log4net,Log4net Configuration,我是log4net的新手,我正在尝试维护一些使用它的遗留代码。我注意到,有两个静态类告诉log4net要登录到不同的位置,这两个类互相绊倒了 每个类都有一个如下所示的静态构造函数 静态记录器(){ _Logger=新的X.LoggingService.AppLogger( X.UtilityServer.Configuration.ConfigInfo.LoggerConfigFile); } 不同配置值除外;这两个静态类都在初始化相同的applogerhelper类。要初始化的第二个类将覆盖
静态记录器(){
_Logger=新的X.LoggingService.AppLogger(
X.UtilityServer.Configuration.ConfigInfo.LoggerConfigFile);
}
不同配置值除外;这两个静态类都在初始化相同的apploger
helper类。要初始化的第二个类将覆盖第一个类的初始化。我想我已经找到了问题的根源:
专用ILog日志{
得到{
如果(!\u配置程序集){
_ConfiguratorSet=true;
XmlConfigurator.Configure(新文件信息(_ConfigFile));//理想情况下,应该发生的是:
配置log4net(在应用程序启动时执行此操作一次,速度非常慢)
使用依赖注入将ILog传递给类(更好)或服务定位器(更差),以获得所需类中的ILog
一种配置可以为您提供多个记录器,这些记录器又可以有多个附加器,这些附加器可以记录到各种输出(数据库、控制台、队列等)这为一个配置文件提供了很大的灵活性。您可以使用一个配置文件和两个具有不同名称的文件记录器,使用两个不同的附加器将数据输出到两个文件中
代码
private ILog Log {
get {
if (!_ConfiguratorSet) {
_ConfiguratorSet = true;
XmlConfigurator.Configure(new FileInfo(_ConfigFile)); //<--- STATIC
}
return _log;
}
}
专用ILog日志{
得到{
如果(!\u配置程序集){
_ConfiguratorSet=true;
XmlConfigurator.Configure(新文件信息(_ConfigFile));//理想情况下,应该发生的是:
配置log4net(在应用程序启动时执行此操作一次,速度非常慢)
使用依赖注入将ILog传递给类(更好)或服务定位器(更差),以获得所需类中的ILog
一种配置可以为您提供多个记录器,这些记录器又可以有多个附加器,这些附加器可以记录到各种输出(数据库、控制台、队列等)这为一个配置文件提供了很大的灵活性。您可以使用一个配置文件和两个具有不同名称的文件记录器,使用两个不同的附加器将数据输出到两个文件中
代码
private ILog Log {
get {
if (!_ConfiguratorSet) {
_ConfiguratorSet = true;
XmlConfigurator.Configure(new FileInfo(_ConfigFile)); //<--- STATIC
}
return _log;
}
}
专用ILog日志{
得到{
如果(!\u配置程序集){
_ConfiguratorSet=true;
Configure(新文件信息(_ConfigFile));//我将如何完成#1--配置log4net一次?此代码库中有许多xml文件位置存储为配置设置。当project X需要记录时,它会拉下配置文件路径,并将其传递给此helper类,该类调用XmlConfigurator。配置并将实际文件(新文件)传递给(_ConfigFile)。有没有一种简单的方法可以在不重新设计大量内容的情况下修复此问题?在我的项目中,我使用了一种方法,其中一个VS解决方案包含一个项目,该项目通常由使用该解决方案的其他项目共享。该项目通常称为Core
或Commons
。在这里,我将保留一个提供静态数据的静态类方法配置log4net,静态方法按名称获取日志。通常一个解决方案只有一个入口点,因此我在那里调用configure
方法。在一个VS解决方案中是否有多个入口点(例如web项目、服务、Win应用程序)?这样,project X只能传递它所需的looger的名称,还是更复杂的情况?我认为这只是写得很差。这段代码的全部要点是能够动态更改刚刚执行得很差的配置信息。我认为我需要查看log4net,看看如何在配置f中设置它所需的配置部分ile,然后让想要记录的人指定他们需要的配置部分。我该如何完成#1--配置log4net一次?这个代码库有许多xml文件位置存储为配置设置。当project X需要记录时,它会将配置文件路径拉下来,并将其传递给这个助手类,该类调用XmlConfigurator.Confi读取并将实际文件(新文件)传递到(\u ConfigFile)。有没有一种简单的方法可以在不重新设计大量内容的情况下修复此问题?在我的项目中,我使用了一种方法,其中一个VS解决方案包含一个项目,该项目通常由使用该解决方案的其他项目共享。该项目通常称为Core
或Commons
。在这里,我将保留一个提供静态数据的静态类方法配置log4net,静态方法按名称获取日志。通常一个解决方案只有一个入口点,因此我在那里调用configure
方法。在一个VS解决方案中是否有多个入口点(例如web项目、服务、Win应用程序)?这样,project X只能传递它所需的looger的名称,还是更复杂的情况?我认为这只是写得很差。这段代码的全部要点是能够动态更改刚刚执行得很差的配置信息。我认为我需要查看log4net,看看如何在配置f中设置它所需的配置部分ile,然后让想要记录日志的人指定他们需要的配置部分。