4

我正在尝试将 log4net 合并到我的 Web 应用程序中。我已经使用基于 .net mvc 的较新部分这样做了,但是在将其合并到我的应用程序的基于 Web 表单的部分时遇到了麻烦。我环顾四周找了一个例子,但没有遇到过。

为了缩小我的问题范围,假设我知道如何配置我的 web.config 文件。我的问题是:

(1) 我考虑过将对 log4net 的实际调用放在“Global.asax”文件中,并将其放在我的基本页面中(所有其他页面都在该页面上构建)。我应该将实际代码放在这些地方,如果不是,我应该把代码放在哪里?

(2)我对代码的理解是我需要实例化一个日志,然后在我想要的时候有那个日志日志的东西(日志的细节由web.config处理),但我不知道该代码实际上应该是什么样子。那么,我应该在我的文件中实际放置什么代码?(示例将不胜感激)

谢谢

4

3 回答 3

7

只需将代码放在您需要的地方。

开始我只是在我需要的每一页中使用这条线......

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 应用程序总是重新启动。

要做到这一点,您只需在 add 中将以下内容添加到 web.config

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

而不是在 web.config 中的某处添加这一行

<log4net configSource="log.config"/>

然后文件“log.config”配置了所有侦听器。但不要忘记将文件复制到您的生产/测试环境。否则您可能会收到奇怪的错误消息。

hth

于 2012-08-01T15:10:32.990 回答
1

将它放在基本页面中听起来是个好主意,然后在使用 GetLogger 进行实例化时,您可以传入您正在登录的页面(尽可能具体地说明您的日志调用来自哪里确实有助于调试)。您还需要在实例化后调用 .Configure ,这总是让我感到困惑(需要为此导入 Log4Net.Configure)

将您的侦听器配置放在 web.config 中,并通过 LevelRangeFilter 定义最小/最大级别(DEBUG 最低,FATAL 最高)。

用法非常简单 - 您只需使用所需的级别进行日志记录,例如:log.Info、log.InfoFormat、log.Error、log.ErrorFormat(格式就像 String.Format 一样工作) - 低于最低配置日志级别的任何内容都将是忽略,因此您可以根据需要进行尽可能多的登录。

你也检查过Elmah吗?这允许您跟踪未处理的异常。http://code.google.com/p/elmah/

于 2012-08-01T14:56:46.193 回答
0

分享一下我使用logger的经验。通常我将它与 IOC 容器一起使用,即 Windsor。因此,我在 Global.asax 文件中进行了记录器的初始化,因为它每个应用程序运行一次,并且处理所有请求。这是初始化记录器的合适位置。至于应该调用日志的地方,没有任何建议。你应该打电话到你需要的地方。如果您根据页面生命周期记录一些事件,当然您应该在页面代码隐藏文件中使用记录器。但是如果你想跟踪你的组件,最好在单独的库中提取逻辑并在其中使用记录器。

于 2012-08-01T15:01:00.443 回答