我正在尝试使用NLog记录系统中的某些内容。这是一个非常复杂的系统,在不同地方使用消息队列进行多线程。NLog - 扩展Nlog - callsite - dispose()
我们需要扩展NLog来记录我们需要的其他项目。 扩展NLog之后,我们发现callsite信息是错误的。 Stack上的一些搜索给了我一个解决方案。 我现在担心的是,随着我们所做的扩展(传递TypeName),我们可能会有几百个日志实例,并且我很不情愿这样做会非常快速地备份。
我没有看到NLog的dispose方法,所以我不知道垃圾回收会如何挑选它。
如果我有100个班,每个在不同的线程处理1000个事务第二运行,并且每个这些被记录,并创建一个新的日志实例,我看到我的未来问题。
我很乐意提供建议。请让我知道这是否会成为问题,如果有的话,可能的解决方案?
编辑:添加代码: - 这里是ExtenderClass(取类名)
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忙碌的一天。
public class ThreadTask : TaskBase
{
private readonly NLogLogger _logger = new NLogLogger(typeof(ThreadTask));
public Method(string val)
{
_logger.Trace(message);
}
}
是的,你是对的。但我扩展nLog,所以我有一个基类。我必须将该类型传递给基类以使该调用点正确。 – bugnuker 2012-04-26 19:53:04
我不明白你有什么问题。你为什么要有几百个日志实例?通过声明你的记录器类似于我上面说明的方式(考虑到你已经记录了记录器的事实),你应该在你的应用程序中为每个类记录一个实例。因此,如果您有1个类(将记录器作为静态成员)并且创建了100个类的实例,则只有1个记录器实例。你能发表一些代码来展示你如何在你的类中声明和创建记录器吗? – wageoghe 2012-04-26 21:08:32
在原始问题中增加了代码 – bugnuker 2012-04-26 22:50:16