Ошибка входа в приложение Asp.net MVC внутри веб-приложения или домена? - PullRequest
1 голос
/ 10 июня 2011

Я просто хочу знать, что было бы наилучшей практикой / широко использовалось, в настоящее время я веду свою регистрацию на уровне службы домена, однако все, что происходит внутри уровня моего веб-приложения, не регистрируется.

Я хотел бы, чтобы одно централизованное и простое местоположение делало все мои записи создания / удаления / обновления ...

Я слышал об Элме, но не уверен, насколько она полезна только для ведения журнала на уровне доменных служб ...

В настоящее время я вообще не использую какой-либо фреймворк для регистрации, я просто строю строку своего сообщения журнала или получаю исключение и сбрасываю его в базу данных ... Это лучший способ это сделать?

Если это имеет значение ... Мне нужно использовать Ninject для инъекций в моем ILoggingService

ПРИМЕЧАНИЕ. Я не говорю о ведении журнала активности пользователей ... который определенно будет находиться только внутри уровня моего доменного сервиса ...

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Haroon,

Использование Ninject для создания и управления жизненным циклом службы ILoggingService.Реализация этой службы должна быть построена непосредственно на хорошо протестированной библиотеке журналирования, такой как NLog или log4net.

Получив экземпляр службы, вы можете легко внедрить ее либо в свой контроллер MVC, либо в свой домен.слой.Все ведение журнала должно происходить для этого экземпляра, а не для статического класса ведения журнала.

Это позволит вам получить единую систему ведения журнала, которую вы ищете, с четким разделением проблем.

0 голосов
/ 10 июня 2011

imho logging не должен вводиться. Причина в том, что большинство ваших служб (если не все) будут использовать ведение журнала.

Если вы посмотрите на большинство каркасов ведения журналов (например, 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");
      }
}
...