![](/img/trans.png)
[英]unable to write logs to a file using log4net in an ASP.NET Web Forms Site
[英]Using log4net with asp.net web forms
我正在尝试将log4net合并到我的Web应用程序中。 我已经使用基于.net mvc的新部分完成了这项工作,但是我很难将其合并到我的应用程序的基于Web表单的部分中。 我环顾四周寻找一个例子并没有遇到过一个例子。
为了缩小我的问题范围,让我们假设我知道如何配置我的web.config文件。 我的问题是:
(1)我考虑将实际调用log4net放在“Global.asax”文件中,并将其放在我的基页(构建所有其他页面)上。 我应该将实际代码放在这些地方中的哪一个,如果不是,我应该把代码放在哪里?
(2)我对代码的理解是我需要实例化一个日志,然后在我想要的时候记录日志(日志的细节由web.config处理),但我不知道该代码应该是什么样子。 那么,我应该在我的文件中放置什么代码? (例如,将不胜感激)
谢谢
只需将代码放在您需要的地方。
发起我只需在我需要的每个页面中使用此行...
static Logger log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
所以记录器获取当前类的名称,包括完整名称空间。 我还使用global.asax中的记录器来进行错误记录
protected void Application_Error(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append("Unhandled error occured in application. Sender: ");
sb.AppendLine(Request.RawUrl);
sb.Append("Query: ");
sb.AppendLine(Request.QueryString.ToString());
Exception ex = Server.GetLastError().GetBaseException();
log.Error(sb.ToString(), ex);
Server.ClearError();
Response.Redirect("~/Error.aspx");
}
但是我从web.config中分离了日志配置。 它对我来说更容易,你不必处理如此大的文件。 我还认为,当您更改日志配置文件时,应用程序不会重新启动。 如果你更新web.config,应用程序总是重新启动,据我所知。
要完成此任务,您只需要在web.config中添加以下内容即可
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
而不是在web.config中的某处添加此行
<log4net configSource="log.config"/>
然后文件“log.config”配置了所有侦听器。 但不要忘记将文件复制到您的生产/测试环境。 否则你可能会得到奇怪的错误信息。
心连心
将它放在基页中听起来是个好主意,然后在使用GetLogger进行实例化时,您可以传入您正在登录的页面(尽可能具体地说明日志调用的来源真的有助于调试)。 在实例化之后你还需要调用.Configure,这总是让我感到厌烦(需要为此导入Log4Net.Configure)
将监听器配置放在web.config中并通过LevelRangeFilter定义最小/最大级别(DEBUG最低,FATAL最高)。
用法非常简单 - 您只需使用所需级别进行日志记录,EG:log.Info,log.InfoFormat,log.Error,log.ErrorFormat(格式就像String.Format一样) - 低于最低配置日志级别的任何内容都将是被忽略,因此您可以根据需要添加尽可能多的登录。
你也检查过艾玛吗? 这允许您跟踪未处理的异常。 http://code.google.com/p/elmah/
让我分享一下使用记录器的经验。 通常我会将它与IOC容器一起使用,即Windsor。 因此我在Global.asax文件中初始化logger,因为每个应用程序运行一次,并且所有请求都是berore。 这是初始化记录器的适当位置。 至于你应该调用日志的地方,没有任何建议。 你应该在你需要的地方打电话。 如果您基于页面生命周期记录某些事件,当然您应该在文件后面的页面代码中使用logger。 但是,如果要跟踪组件,最好在单独的库中提取逻辑并在其中使用记录器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.