См. Эту ссылку для «расширения» 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.