Вам не нужно/должна использовать статическую переменную. Обычно мои классы будут выглядеть как
public class Foo
{
private ILog Logger;
public Foo()
{
Logger = LogManager.GetLogger(GetType());
}
//rest of class here
}
Это довольно чистое и пока у меня есть проблемы с памятью, нет никакого смысла в начале использования оптимизации памяти приложения. Однако не все мои классы выполняют протоколирование, поэтому только те, которые делают/должны будут иметь этот бит кода в них. Если все ваши классы записываются в журнал, это звучит так, будто вы можете перехватывать журнал, либо это, либо вы имеете дело с довольно большим приложением (в зависимости от того, что у вас есть 300 классов, записывающих в журнал). Если в дальнейшем это так, то 300 экземпляров журнала, вероятно, не являются значительной частью вашего использования памяти.
У вас есть возможность настроить ваш регистратор как именованный экземпляр ILog Logger = LogManager.GetLogger("MyNamedLogger");
вместо этого и использовать этот экземпляр «named» ILog для нескольких классов. Обратите внимание, что вы потеряете часть полезности зарегистрированных сообщений из-за того, как обычно записываются сообщения журнала. Вы могли бы компенсировать это несколькими способами.
Это не похоже на несколько сотен мелких предметов, это дорого ... – CodesInChaos
Ну, это все еще кажется болью с точки зрения кодирования ... Например, я должен помнить, чтобы каждый раз регистрировать журнал как «статический». Если я забуду это, я получаю штраф за исполнение. Есть ли обман, чтобы избежать этой проблемы или упростить ее? –
Не уверен в этом, но метод * GetLogger() * ** может быть ** должен возвращать тот же журнал, если вызван с тем же аргументом. Поэтому, если у вас 300 экземпляров класса, у вас должен быть один логгер для всех них. –