0

我想做这样的事情:

<script RunAt="server">

private static log4net.ILog _logger = null;
public static log4net.ILog Logger
{ get { return _logger; } }

protected void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    log4net.Config.XmlConfigurator.Configure();
    _logger = log4net.LogManager.GetLogger("DtWebLogger");
}

....
</script>

我想知道在此之后我可以在每个页面中使用相同的记录器对象。

那么,这可能吗?或者我在哪里可以即时创建 Logger 的全局实例?

4

3 回答 3

2

您不想要 Logger 的全局实例。相反,您希望每堂课一个。您要记录的每个类都应具有以下内容:

private static readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(MyClass));

类型信息用作记录器输出的一部分。您还可以创建自己的类来包装 ILog,并为您提供一个构造函数,该构造函数从 StackFrame 中提取当前类的类型。

于 2012-05-30T03:33:47.380 回答
0

您的 inited 是正确的,并且 log4net.LogManager.GetLogger 已经使用了一个实例,无需再次使用。

于 2012-05-30T03:33:26.350 回答
0

您可以将其声明为属性并像这样使用:

private static readonly log4net.ILog Log = log4net.LogManager     
.GetLogger(.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

如前所述,您不需要全局记录器。声明嵌套范围。

于 2018-08-02T12:05:07.503 回答