【问题标题】:.net logging with eventid support带有 eventid 支持的 .net 日志记录
【发布时间】:2010-12-05 16:49:33
【问题描述】:

正在寻找替代现有(几乎是旧版)应用程序中的日志记录的方法。这会根据 eventId 记录事件,并将 dll 配置为事件消息文件(记录到事件日志和消息队列)。整个日志记录取决于事件 ID,因为一些记录的事件会上传到企业,并根据事件 ID 进行国际化。 在这个日志基础设施中,还添加了一些文件日志,它不使用这个事件消息文件,而是记录纯字符串(内部具有文件翻转和归档支持)。

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

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

是否有任何现成的日志框架支持这一点,或者我必须自己构建。或者为此调整 log4net/nlog。

谢谢, 弗洛林

【问题讨论】:

    标签: .net logging


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      请参阅link 获取 log4net “扩展”,它允许您合理轻松地将事件 ID 添加到日志消息中。

      这是来自 log4net 链接的缩写 sn-p:

      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 执行的操作。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          TraceSource.TraceEvent-Methode 提供了为日志事件传递数字标识符的可能性,以及可用于记录“普通”消息的方法。

          【讨论】:

          • 一些关于 TraceEvent-Method 的 id 的附加信息是可用的here
          猜你喜欢
          • 2012-04-12
          • 2010-11-22
          • 2018-06-06
          • 2021-04-29
          • 1970-01-01
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多