Где мне следует разместить TraceSwitch для всего проекта или приложения в моем проекте?
-
03-07-2019 - |
Вопрос
Я пытаюсь улучшить свою программу с помощью некоторых функций ведения журнала, предоставляемых System.Diagnostics
.Поскольку мое решение состоит из нескольких проектов, я хотел создать переключатель для всего приложения и по одному для каждого проекта.
Теперь вопрос в том, как я могу этого добиться и где мне поместить определение переключателя?
Начиная с переключателя всего приложения, поскольку в C#, насколько я понимаю, нет такой вещи, как глобальные переменные, как я мог этого добиться?
Будет ли положить
static TraceSwitch ApplicationSwitch = new TraceSwitch("Application", "Enables logging in the whole application.");
решить эту проблему один раз в каждом классе, или это скорее создаст столько переключателей, сколько существует классов, каждый с одинаковым именем?(я думаю, последнее)
Или мне следует поместить инициализацию один раз в отдельный класс
static class GlobalSwitch
{
static TraceSwitch Application = new TraceSwitch("Application", "Enables logging in the whole application.");
}
и ссылка на него из любого другого класса, подобного этому
public OtherClass
{
static TraceSwitch Application = GlobalSwitch.Application;
}
Это решило бы проблему использования одного переключателя для всего проекта, но является ли это хорошей практикой?
Что касается переключателя всего приложения, мне пришлось бы сослаться на проект, содержащий GlobalSwitch
class в любом другом проекте, чего я бы хотел избежать, если это возможно.
Буду очень признателен за некоторые подсказки о том, как это можно сделать разумным способом.
Решение
Обычно я помещаю переключатели трассировки (и функции журнала) в центральную сборку журналирования, предоставляя статический интерфейс переключателям, а также методы статического журнала, которые будут вызывать используемые базовые функции журнала (обычно функции Trace.Write).