繁体   English   中英

将log4net与asp.net Web表单结合使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM