我可以使用Global.asax的静态属性作为log4net记录器吗?

时间:2012-05-30 03:27:08

标签: c# asp.net log4net

我想做这样的事情:

<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的全局实例?

3 个答案:

答案 0 :(得分:2)

您不需要Logger的全局实例。相反,你想要每个班级一个。您要记录的每个类应该具有以下内容:

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

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

答案 1 :(得分:0)

你的inited是对的,log4net.LogManager.GetLogger已经使用了一个实例,不需要再做了。

答案 2 :(得分:0)

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

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

如前所述,您不需要全局记录器。声明嵌套作用域。