Установить имя журнала в приложении log4net

У меня есть класс MyLogger, где я использую log4net. Как я могу изменить мое приложение для сохранения журнала с определенным именем журнала (я хочу установить его с помощью параметра logName).

public void AddEntry(string source, string logName, string contextInfo, string message, EventLogEntryType eventType)
        {

             log4net.ILog Log = log4net.LogManager.GetLogger(source);

             Log.Error(String.Format("Context Info: {0}{1}{2}{3}", contextInfo, Environment.NewLine, Environment.NewLine, message));

        }

<log4net>
  <root>
    <priority value="ALL" />
     <appender-ref ref="EventLogAppender" />
  </root>

Это myAppender. Теперь он пишет в общем журнале тип Application.

  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%logger (%property{myContext}) [%level]- %message%newline" />
    </layout>
  </appender>
</log4net>

person user278618    schedule 20.08.2010    source источник
comment
Является ли logName глобальным для приложения или вы хотите иметь возможность изменять его во время выполнения?   -  person AJ.    schedule 20.08.2010
comment
Я хочу изменить это во время выполнения   -  person user278618    schedule 21.08.2010


Ответы (2)


Я думаю, что вы ищете вот что:

<param name="LogName" value="MyLog" />

Дополнительную информацию можно найти здесь. Если вы сделаете что-то подобное, вы можете взглянуть на и эту проблему. В основном речь идет о регистрации вашего приложения, чтобы журнал событий знал об этом.

Изменить (конфигурация по коду):

Не тестировал, но это должно помочь:

foreach (AppenderSkeleton appender in this.Logger.Repository.GetAppenders())
{
    var eventlogAppender = appender as EventLogAppender;
    if (eventlogAppender != null)
    {
        eventlogAppender.LogName = "MyLog";
        eventlogAppender.ActivateOptions();
        break;
    }
 }

Вы можете добавить несколько тестов, чтобы убедиться, что существует только один EventLogAppender, но, вероятно, вам не нужно об этом беспокоиться.

person Stefan Egli    schedule 20.08.2010
comment
Я хочу изменить это значение во время выполнения - person user278618; 21.08.2010
comment
После внесения изменений мне не хватало вызова функции ActivateOptions (). Спасибо! - person deadlydog; 04.03.2015

это работает:

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" />
person user278618    schedule 25.08.2010