首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLog -扩展Nlog - callsite - dispose()

NLog -扩展Nlog - callsite - dispose()
EN

Stack Overflow用户
提问于 2012-03-16 01:10:42
回答 1查看 1.7K关注 0票数 2

我正在尝试使用NLog在我们的系统中记录一些内容。这是一个非常复杂的系统,多线程的消息队列分布在不同的地方。

我们需要扩展NLog来以我们需要的方式记录一些其他项目。在扩展NLog之后,我们发现调用站点信息是错误的。在Stack上的一些搜索给了我一个解决方案。我现在担心的是,随着我们所做的扩展(传递TypeName),我们可能会有数百个日志实例,我有一种不好的预感,这将很快得到备份。

我没有看到NLog的dispose方法,所以我不知道垃圾收集将如何处理这个问题。

如果我有100个类,每个类运行在不同的线程上,每秒处理1000个事务,并且每个类都在记录日志并创建一个新的日志实例,那么我就会看到未来的问题。

我很乐意听取大家的建议。请让我知道这是否会是一个问题,如果是,可能的解决方案?

编辑:添加代码:-这里是ExtenderClass (接受类名)

代码语言:javascript
复制
private readonly Logger _logger;

        public NLogLogger(Type t)
        {
            _logger = LogManager.GetLogger(t.FullName);
        }
        public void Trace(string message, string systemUserID, string transactionID, string description)
        {
             if (_logger.IsTraceEnabled)
                {
                     Write(LogLevel.Trace, message, systemUserID, transactionID, description);
                }
        }

这是一个使用它的类:-这个类将为每个线程任务实例化,所以在繁忙的一天可能会有500个。

代码语言:javascript
复制
public class ThreadTask : TaskBase
    {
        private readonly NLogLogger _logger = new NLogLogger(typeof(ThreadTask));    
        public Method(string val)
           {
               _logger.Trace(message);
           }
     }
EN

回答 1

Stack Overflow用户

发布于 2012-03-19 04:57:04

使用NLog (以及使用log4net )创建记录器实例的典型模式是在每个类中执行以下操作:

代码语言:javascript
复制
public class MyClass
{
  private static readonly Logger logger = LogManager.GetCurrentClassLogger();

  public void DoSomething()
  {
    logger.Debug("Hello from inside DoSomething");
  }
}

这样,每个类只实例化一个记录器实例(具有如上所述创建的记录器)。因此,应该不会因为创建了大量的类实例而创建过多的记录器。此外,由于典型的模式是使用静态记录器实例,因此记录器将在应用程序的整个生命周期中保持有效(或者可能是AppDomain),因此不需要处置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9724719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档