【问题标题】:Is it bad to use same logger for different applications对不同的应用程序使用相同的记录器是不是很糟糕
【发布时间】:2016-07-16 13:52:34
【问题描述】:

我有 3 个不同的应用程序。我在一个共享库中有 log4net,它在 3 个应用程序之间共享。对所有 3 个服务使用相同的记录器是一种不好的做法。 我写过这样的东西

public class Log4netLogger
{
       private ILog _logger = null;
       public Log4netLogger(ILog logger)
       {
           _logger = logger;
       }



       public void write(Level logLevel, string message)
       {
          _logger.Logger.Log(_logger.GetType(),logLevel,message,null);
       }
}

在我的应用程序 1 app_start 中,我像这样注入

 myContainer.RegisterType<ILog>
                        (
                            new ContainerControlledLifetimeManager(),
                            new InjectionFactory(x => LogManager.GetLogger("Application 1"))
                        );

在我的代码中,我正在使用类似

 _logger =  myContainer.Resolve<log4net.ILog>();
 Log4netLogger logMessage= new Log4netLogger(_logger);
 logMessage.Write
             (
                 log4net.Core.Level.Info,
                 logMessage
              );

另外,我认为这种方法的缺点之一是我在所有 3 个应用程序中都安装了 log4net。所以我想知道是我做错了什么还是有更好的方法?

【问题讨论】:

    标签: logging dependency-injection log4net


    【解决方案1】:

    如果您 松散耦合 Log4net,这是一个不错的决定。然后,您可以将您的记录器放在一个不同的项目中并由所有应用程序共享。如果您想要并且需要,您可以隐藏中间件项目(服务、dal 与..)的实现,您可以将接口和实现分离到不同的项目。

    然后您的中间件类只知道接口,您可以更改记录器的实现,而无需重建或重新部署此服务(松散依赖)。

    但是你不能在没有实现的情况下运行你的驱动程序项目(主项目),他们必须知道 Log4Net(或使用相同接口的另一个库)的实现。

    为了松耦合:你的服务应该使用你的接口而不是log4net.ILog

    我对 log4net 没有经验。但是here,他们将工厂用于 log4net。这很好,您的服务将知道您的工厂而不是 Log4Net,而您的工厂将知道 (Log4Net)。

    链接代码:

    public interface ILoggerFactory
    {
        ILogger Create(Type type);   
    }
    
    public class LoggerFactory : ILoggerFactory
    {
        public ILogger Create(Type type)
        {
            return new Log4netLogger(type);
        }
    }
    

    但我再说一遍,您不能在顶级(驱动程序)项目上松散耦合,因为它们必须知道所有实现,否则它们无法注入。

    【讨论】:

    • 是的,我有这个想法,但要指定写入方法的日志记录级别,调用应用程序应该有 log4net
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2011-09-20
    • 2010-12-09
    相关资源
    最近更新 更多