.net протоколирование с поддержкой Eventid - PullRequest
1 голос
/ 05 декабря 2010

Ищете замену для входа в существующее (почти устаревшее) приложение.Это регистрирует события на основе eventId и имеет dll, сконфигурированный как файл сообщений о событиях (регистрация ведется в журнал событий и очередь сообщений).Вся регистрация зависит от идентификатора события, так как некоторые зарегистрированные события загружаются на предприятие, где они интернационализируются на основе идентификатора события.К этой инфраструктуре ведения журналов также было добавлено некоторое ведение журнала файлов, в котором используется не этот файл сообщений о событиях, а записанные в журнал простые строки (дома с поддержкой переноса файлов и поддержки архивирования).иметь стандартный интерфейс для ведения журнала на основе идентификатора (Error (id, object [] args)) и «простых» сообщений (Error (строковое сообщение, object [] args)).

Кажется, что ни log4net, ни nlog не имеют таких интерфейсов.

Есть ли какая-либо готовая платформа ведения журналов, поддерживающая это, или мне приходится создавать самостоятельно.Или адаптируйте как-нибудь log4net / nlog для этого.

спасибо, florin

Ответы [ 4 ]

1 голос
/ 12 декабря 2010

См. Эту ссылку для «расширения» log4net, которое позволяет достаточно легко добавлять идентификаторы событий в сообщения журнала.

Вот сокращенный фрагмент ссылки из log4net:

public interface IEventIDLog : ILog
{
  void Info(int eventId, object message);
  void Info(int eventId, object message, Exception t);
}

public class EventIDLogImpl : LogImpl, IEventIDLog 
{
  /// <summary>
  /// The fully qualified name of this declaring type not the type of any subclass.
  /// </summary>

  private readonly static Type ThisDeclaringType = typeof(EventIDLogImpl);

  public EventIDLogImpl(ILogger logger) : base(logger)
  {
  }


  #region Implementation of IEventIDLog  
  public void Info(int eventId, object message)
  {
    Info(eventId, message, null);
  }


  public void Info(int eventId, object message, System.Exception t)
  {
    if (this.IsInfoEnabled)
    {
      LoggingEvent loggingEvent = new LoggingEvent(ThisDeclaringType, Logger.Repository, Logger.Name, Level.Info, message, t);
      loggingEvent.Properties["EventID"] = eventId;
      Logger.Log(loggingEvent);
    }
  }
}

Я не вижу причин, по которым вы не могли бы сделать нечто подобное с NLog . Вот ссылка на некоторые примеры расширения NLog Logger в исходном репозитории gitub NLog.

Также отмечу, что System.Diagnostics.TraceSource также поддерживает ведение журнала EventId. Если вы рассматриваете System.Diagnostics, вы можете также рассмотреть возможность использования Ukadc.Diagnostics , чтобы получить некоторые сильные возможности форматирования, аналогичные тем, которые вы можете сделать с log4net и NLog.

1 голос
/ 12 декабря 2010

Вы также можете интегрировать ведение журнала унаследованного приложения в обычную инфраструктуру ведения журналов. Это может быть легко достигнуто с помощью функции маршрутизации .net Common.Logging , которая является абстракцией каркасов ведения журналов (она поддерживает enteprise lib, log4net, NLog, System.Trace).

1 голос
/ 05 декабря 2010

Посмотрите на блок приложения ведения журнала в Enterprise Library: http://msdn.microsoft.com/en-us/library/cc511708.aspx

0 голосов
/ 11 октября 2016

TraceSource.TraceEvent-Methode предоставляет возможность передавать числовой идентификатор для события журнала, а также методы, которые вы можете использовать для записи "простых" сообщений.

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