Проблема с моим кастомным LogManager - PullRequest
1 голос
/ 26 мая 2011

Вот моя ситуация: у меня есть библиотечный проект с целью переопределить log4net и централизовать журналы с помощью специального приложения. У меня есть эти классы:

myCustomLogManager
CustomLog
ICustomLog

В myCustomLogManager я получил это:

public class myCustomLogManager
{    
    public static ICustomLog GetLogger(System.Type t)
    {
        return new CustomLog(t);
    }
    // Other stuff
}

Мой пользовательский журнал:

class CustomLog : ICustomLog
{
    private static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    public CustomLog(System.Type t)
    {
        log = LogManager.GetLogger(t);
    }

    public void Debug( string message, Exception e)
    {
        log.Debug(message, e);
    }
}

В моем проекте консольного приложения в каждом классе я объявляю:

private static readonly ICustomLog logger = myCustomLogManager.GetLogger(typeof(myClass));

Когда я захожу в myClass, нет проблем. Но если я использую другой класс, где я тоже веду журнал (скажем, myOtherClass), имя регистратора моего будущего журнала в myClass будет иметь значение «myOtherClass». Чтобы проиллюстрировать проблему, вот пример вывода:

  • [Info] myProject.myClass: «Журнал из myClass!»
  • [Info] myProject.myOtherClass: «Журнал из myOtherClass!»
  • [Info] myProject.myOtherClass: «Второй журнал из myClass !!»

Это довольно сложно объяснить, и я надеюсь, что я достаточно ясен, но факт - это регистратор по умолчанию, после того, как что-то сделано в классе myOtherClass, это myProject.myOtherClass и не возвращается к myProject.myClass при входе в класс myClass .

Как я могу это исправить?

Спасибо за чтение и вашу помощь: -)

1 Ответ

0 голосов
/ 26 мая 2011

Сделать log in CustomLog нестатичным:

private ILog log;

(также нет необходимости инициализировать его чем-либо)

Имея статическое поле, вы, по сути, просто имеетеодин регистратор, поэтому он изменяется при использовании менеджера журналов для получения «нового» регистратора для второго класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...