Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Якобинец
306 / 16 / 1
Регистрация: 26.01.2013
Сообщений: 336
#1

Архитектура логирования

17.11.2014, 14:07. Просмотров 857. Ответов 6
Метки нет (Все метки)

По всем правилам "хорошего тона" создания приложений добавление записей в журнал (логгирование) должно быть вынесено в отдельный проект и общение с ним должно производиться посредством интерфейса.
В интернете было предложено создать интерфейс ILoggerFactory, который должен быть реализован в проекте логгера и возвращать ссылку на класс, содержащий инструменты для обращения к log4net или NLog.
(Это делается для того, чтобы в любой момент я мог отказаться от одного инструмента логгирования, например, NLog, и перейти к другому, например, log4net)
То есть получается, я создал библиотеку классов Log
Создал в ней интерфейс:
C#
1
2
3
4
5
6
7
namespace Log
{
   public interface ILoggerFactory
   {
      public ILogger GetLogger(Type type);
   }
}
(в реализации ILogger и заключена логика взаимодействия с log4net/NLog)
Вопрос в следующем: как сделать так, чтобы я мог всегда в любом месте любого проекта вызвать метод GetLogger? Статическим метод GetLogger(...) сделать нельзя, так как он реализует интерфейс. Статическим класс LiggerFactory - тоже нельзя по той де причине (статический класс не может реализовать интерфейс). Если сделать синглтоном, то нужно каким-то образом предусмотреть в каждом классе каждого проекта ссылку на него ...
Посмотрите пожалуйста у себя, как вы вышли из этого положения.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2014, 14:07
Ответы с готовыми решениями:

Компонента для логирования программы...
И снова привет всем человекам любящим программирование!!!!!!!!!!!!! Такой...

Архитектура
Всем добрый вечер! Возник такой вопрос. Как лучше из одного класса получить...

Плагинная архитектура
Добрый день, поделитесь наработками, ресурсами, по теме, плиз.

плагинная архитектура
здравствуйте. посоветуйте толковую книгу или ресурс (желательно на русском) по...

Архитектура корпоративных приложений
В настоящий момент на предприятии предстоит разработка информационной...

6
SharpDeveloper
134 / 131 / 22
Регистрация: 16.02.2012
Сообщений: 453
17.11.2014, 15:50 #2
Я у себя делаю так
C#
1
private readonly Logger _logger = Logger.GetInstance();
1
Якобинец
306 / 16 / 1
Регистрация: 26.01.2013
Сообщений: 336
17.11.2014, 16:17  [ТС] #3
А что у тебя такое Logger (синглтон, статический класс, класс со статической функцией)?
Где он определяется и где связывается с инструментом логгирования типа log4net, NLog?
0
SharpDeveloper
134 / 131 / 22
Регистрация: 16.02.2012
Сообщений: 453
17.11.2014, 16:45 #4
C#
1
2
3
4
5
6
7
8
9
10
11
    public class Logger
    {
        private static readonly Logger instance = new Logger();
 
        public static Logger GetInstance()
        {
            return instance;
        }
    
    ...
    }
1
Якобинец
306 / 16 / 1
Регистрация: 26.01.2013
Сообщений: 336
18.11.2014, 10:20  [ТС] #5
А Logger работает с каким инструментом логгирования? log4net?
0
kenny69
burning1ife
1371 / 1198 / 282
Регистрация: 21.09.2008
Сообщений: 3,356
Записей в блоге: 9
18.11.2014, 11:47 #6
Цитата Сообщение от Якобинец Посмотреть сообщение
Вопрос в следующем: как сделать так, чтобы я мог всегда в любом месте любого проекта вызвать метод GetLogger?
Через Dependency Injection.
http://habrahabr.ru/post/176007/

Добавлено через 3 минуты
Вы работаете только через Interface
Реализация подменяется довольно просто (Ninject):
C#
1
2
3
4
5
6
7
8
public class LogerNinjectModule : NinjectModule
    {
        public override void Load()
        {
            this.Bind<ILoger>().To<NLoger>();
         //  this.Bind<ILoger>().To<Log4NetLoger>();если надо использовать другой
        }
    }

C#
1
2
3
4
5
6
7
8
9
10
11
 public class BlablaClass
    {
        [Inject]
        public ILoger Loger{ get; set; }
 
   void MethdoWithLog()
     {
          //Do Something
          Loger.Log("blabla");
     }
}
}
1
Якобинец
306 / 16 / 1
Регистрация: 26.01.2013
Сообщений: 336
12.12.2014, 16:09  [ТС] #7
А можно посмотреть на NLogger?
0
12.12.2014, 16:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2014, 16:09

Архитектура бизнес-приложения
Занимаюсь разработкой крупного приложения, думаю как организовать обмен данными...

Архитектура графического компонента
C графикой вроде разобрался.Спасибо. Есть еще такой вопрос. По нажатию кнопки...

Архитектура графического компонента
Всем привет. Делаю такой графический компонент (внизу) на С# WinForms. Как это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru