Я думаю, вы не видите здесь лес за деревьями. ILog и LogManager являются легким фасадом, почти 1: 1, эквивалентным протоколированию общего доступа Apache, и фактически не связывают ваш код с остальной частью log4net.
<rant>
Я также обнаружил, что почти всегда , когда кто-то создает оболочку MyCompanyLogger вокруг log4net, он сильно упускает суть и либо теряет важные и полезные возможности платформы, выбрасывает полезную информацию, теряет возможный прирост производительности при использовании даже упрощенный интерфейс ILog, или все вышеперечисленное. Другими словами, упаковка log4net во избежание связи с ним является анти-паттерном .
</rant>
Если вы чувствуете необходимость внедрить его, сделайте свой экземпляр регистратора доступным через свойство, чтобы включить внедрение, но создайте экземпляр по умолчанию старомодным способом.
Что касается включения контекстного состояния в каждое сообщение журнала, вам необходимо добавить глобальное свойство, чье ToString()
разрешает то, что вы ищете. Например, для текущего размера кучи:
public class TotalMemoryProperty
{
public override string ToString()
{
return GC.GetTotalMemory(false).ToString();
}
}
Затем подключить его во время запуска:
GlobalContext.Properties["TotalMemory"] = new TotalMemoryProperty();