具有偶数支持的.net日志记录

时间:2010-12-05 16:49:33

标签: .net logging

希望找到现有(几乎是传统)应用程序中日志记录的替代品。这会根据eventId记录事件,并将dll配置为事件消息文件(对事件日志和消息队列进行日志记录)。整个日志记录取决于事件ID,因为一些记录的事件被上传到企业,在那里它们根据事件ID进行国际化。 对于这个日志记录基础结构,还添加了一些文件日志记录,它不使用此事件消息文件,而是记录普通字符串(内部文件翻转和存档支持)。

我正在寻找一个日志框架,它将具有基于id(Error(id,object [] args))和“plain”消息(Error(string message,object [] args))的日志记录标准接口。

log4net和nlog似乎都没有这样的接口。

是否有任何支持这个的搁置日志框架,或者我必须自己构建。或者以某种方式适应log4net / nlog。

感谢, 林

4 个答案:

答案 0 :(得分:1)

查看Enterprise Library中的日志记录应用程序块: http://msdn.microsoft.com/en-us/library/cc511708.aspx

答案 1 :(得分:1)

有关log4net“扩展名”的信息,请参阅此link,以便您可以合理轻松地将日志消息添加到日志消息中。

以下是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的github源代码库中的link to some examples of extending the NLog Logger

我还会注意到System.Diagnostics.TraceSource也支持记录EventId。如果您考虑System.Diagnostics,您可能还需要考虑使用Ukadc.Diagnostics来获得一些强大的格式化功能,类似于您对log4net和NLog的处理能力。

答案 2 :(得分:1)

您还可以将旧版应用程序的日志记录集成到常规日志记录基础结构中。这可以通过使用。routing feature Common.Logging轻松实现,它是日志框架的抽象(它支持enteprise lib,log4net,NLog,System.Trace)。

答案 3 :(得分:0)

TraceSource.TraceEvent-Methode提供了传递日志事件的数字标识符的可能性,以及可用于记录&#34; plain&#34;消息。