我看到LogNet通常使用静态变量进行实例化:
static logger = LogManager.GetLogger(frame.GetMethod().DeclaringType);
愚蠢的问题,但是:
1)这不是有点烦人 - 即。我必须在我的代码的每个记录段中都有这个混乱的调用。
2)这不会产生大量的内存开销 - 即。我的每一个类都将与一个单独的日志记录类相关联。 300个使用日志记录的类将强制使用300个日志记录静态变量?看起来很奇怪。
答案 0 :(得分:2)
log4net维护着一个记录器存储库,您无需将它们设置为静态。建议使用每个类命名的记录器,您不必担心在内存中有几百个记录器的“开销”。如果这是一个问题,您可能需要完全删除日志记录。
日志记录很混乱,即它会使您的代码混乱,而这些东西并不是业务的一部分。面向方面编程可能会帮助您there。
答案 1 :(得分:1)
您不需要/必须使用静态变量。通常我的类看起来像
public class Foo
{
private ILog Logger;
public Foo()
{
Logger = LogManager.GetLogger(GetType());
}
//rest of class here
}
这是相当干净的,直到我遇到内存问题,早期优化应用程序的内存使用是没有意义的。然而,并非所有类都执行日志记录,因此只有那些需要执行/需要的类才能使用这些代码。如果你的每个类都在记录,那么听起来你可能会过度记录,或者你正在处理一个相当大的应用程序(基于你有300个类写入日志的事实)。如果是后一种情况,那么300个日志记录类实例可能不是内存使用量足迹的重要部分。
您可以选择将记录器设置为命名实例ILog Logger = LogManager.GetLogger("MyNamedLogger");
,并在多个类中使用此“命名”ILog实例。请注意,由于日志消息通常被写出的方式,您将丢失已记录消息的一些有用性。你当然可以用几种不同的方式弥补这一点。