我正在尝试使用NLog在我们的系统中记录一些内容。这是一个非常复杂的系统,多线程的消息队列分布在不同的地方。
我们需要扩展NLog来以我们需要的方式记录一些其他项目。在扩展NLog之后,我们发现调用站点信息是错误的。在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);
}
}发布于 2012-03-19 04:57:04
使用NLog (以及使用log4net )创建记录器实例的典型模式是在每个类中执行以下操作:
public class MyClass
{
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
public void DoSomething()
{
logger.Debug("Hello from inside DoSomething");
}
}这样,每个类只实例化一个记录器实例(具有如上所述创建的记录器)。因此,应该不会因为创建了大量的类实例而创建过多的记录器。此外,由于典型的模式是使用静态记录器实例,因此记录器将在应用程序的整个生命周期中保持有效(或者可能是AppDomain),因此不需要处置。
https://stackoverflow.com/questions/9724719
复制相似问题