在Web应用程序或域层中的Asp.net mvc应用程序中记录错误?

问题描述:

我只想知道什么是最佳实践/广泛使用,我目前在域服务层做日志记录,但是在我的Web应用程序层内发生的任何事情都没有记录。在Web应用程序或域层中的Asp.net mvc应用程序中记录错误?

我想一个集中和简单的位置,以尽我创建/删除/更新loggging ...

我听说ELMAH的,不知道它是多么有用的唯一域服务层记录...

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

如果它的事项......我需要使用Ninject我ILoggingService注入

注意:我说的不是记录用户活动......将definetly我的域名服务层内只存在...

Haroon,

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

一旦你有一个服务的实例,你可以很容易地将它注入到你的MVC控制器或你的领域层。所有日志记录应该针对该实例发生,而不是静态日志记录类。

这将允许你有你想要的统一日志记录,并且有一个清晰的关注点。

+0

你觉得这是更好地记录我的asp.net MVC应用程序或服务领域里面? – Haroon 2011-06-10 11:58:35

+0

imho不同层次记录不同的东西。 MVC(用户层)可能记录所有用户交互,而域层登录逻辑错误等。 – jgauffin 2011-06-10 12:22:35

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

如果我是/不是将我的日志记录实例注入到我的应用程序中=>我个人认为使用基类会更好,它包含对我所有服务的日志记录的引用,您是否也有同感? – Haroon 2011-06-10 11:57:53

+0

不,我不会创建一个基类,只是为了增加对日志记录的支持(我强烈建议不要使用瑞士军刀基类,它们会破坏很多设计原则)。如果你已经有一个基类,那么向它添加一个记录器属性就可以了。 – jgauffin 2011-06-10 12:20:14