1

我只想知道什么是最佳实践/广泛使用,我目前在域服务层进行日志记录,但是在我的 Web 应用程序层中发生的任何事情都不会被记录。

我想要一个集中且简单的位置来完成我所有的创建/删除/更新日志记录...

我听说过 Elmah,不确定它仅对域服务层日志记录有多大用处……

我目前根本不使用任何日志框架,我只是将我的日志消息字符串生成器或获取异常并将其刷新到数据库中......这是最好的方法吗?

如果重要的话......我需要使用 Ninject 注入我的 ILoggingService

注意:我不是在谈论记录用户活动......它肯定只会驻留在我的域服务层内......

4

2 回答 2

2

哈龙,

利用 Ninject 创建和管理 ILoggingService 的生命周期。该服务的实现应直接构建在经过良好测试的日志库(如 NLog 或 log4net)之上。

一旦你有了服务的实例,你就可以轻松地将它注入到 MVC 控制器或域层中。所有日志记录都应该针对该实例进行,而不是针对静态日志记录类。

这将允许您拥有您正在寻找的统一日志记录,并完全分离关注点。

于 2011-06-10T11:25:19.093 回答
0

恕我直言,不应注入日志记录。原因是您的大多数服务(如果不是全部)将使用日志记录。

如果您查看大多数日志框架(例如nlog),它们使用单​​例/外观和抽象工厂来提供日志记录。

就像是:

public static class LogFactory
{
    private static ILogFactory _instance;

    public void Assign(ILoggingFactory factory)
    {
         _instance = factory;
    }

    public ILogger CreateFor<T>()
    {
        return _instance.CreateFor<T>();
    }
}

该设计使您的服务仅依赖于一个类和一个接口。因此,切换日志实现仍然非常容易。

在您的课程中使用如下代码:

public class ServiceImp : IService
{
      private ILogger _logger = LogFactory.CreateFor<IService>();

      public void SomeMethod()
      {
           _logger.Warning("Something went wrong, but we can handle it. Hence only a warning");
      }
}
于 2011-06-10T11:46:29.630 回答