我可以将 Global.asax 的静态属性用作 log4net 记录器吗?
本文关键字:log4net 记录器 属性 Global asax 静态 我可以 | 更新日期: 2023-09-27 18:35:46
我想做这样的事情:
<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 的全局实例。相反,您希望每个类一个。要记录的每个类都应该有这样的内容:
private static readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(MyClass));
类型信息用作记录器输出的一部分。您还可以创建自己的类来包装 ILog,并为您提供一个构造函数,该构造函数从 StackFrame 中提取当前类的类型。
你的发起是正确的,log4net。LogManager.GetLogger已经使用了一个实例,无需再次执行。
您可以将其声明为属性并像这样使用:
private static readonly log4net.ILog Log = log4net.LogManager
.GetLogger(.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
如前所述,您不需要全局记录器。在嵌套作用域上声明。