Задайте имя журнала в приложении log4net - PullRequest
4 голосов
/ 20 августа 2010

У меня есть класс MyLogger, где я использую log4net.Как я могу изменить мой appender, чтобы сохранить журнал в определенном имени журнала (я хочу установить его параметром 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.Теперь он пишет в общем журнале приложений.

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

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

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

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

<param name="LogName" type="log4net.Util.PatternString" value="%property{LogName}" />
2 голосов
/ 20 августа 2010

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

<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, но, вероятно, вам не нужно беспокоиться об этом.

...