错误在Web应用程序或域层内登录Asp.net mvc app?

时间:2011-06-10 09:36:14

标签: asp.net-mvc logging c#-3.0 ninject domainservices

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

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

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

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

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

注意:我不是在谈论记录用户活动...它将完全驻留在我的域服务层内......

2 个答案:

答案 0 :(得分:2)

哈龙,

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

获得服务实例后,您可以轻松地将其注入MVC​​控制器或域层。所有日志记录都应该针对该实例进行,而不是静态日志记录类。

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

答案 1 :(得分:0)

imho伐木不应该注入。原因是大多数服务(如果不是全部)都将使用日志记录。

如果你看一下大多数日志框架(比如nlog),他们会使用singleton / facade和抽象工厂来提供日志记录。

类似的东西:

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");
      }
}