【问题标题】:Error Logging in a ASP.NET WebApplicationASP.NET Web 应用程序中的错误日志记录
【发布时间】:2023-04-10 01:50:01
【问题描述】:

如果发生异常,应将其记录到文本文件中。并且应该将用户重定向到向用户解释错误的页面。

我从哪里开始?

【问题讨论】:

  • 使用 try - catch 块。在 web.config 中配置文件的位置,并使用 try-catch 块添加文件参数。
  • 实际上,我需要将错误记录到文本文件中。
  • 您希望将每个异常记录到其自己的唯一文件中吗?还是您希望将所有异常记录到一个文件中?
  • 不管怎样都会好的....但我很可能更喜欢它只是 1 个文件

标签: c# asp.net error-handling error-logging


【解决方案1】:

我建议使用 log4net。很容易做到这一点。

首先,download log4net。解压,然后在你的项目中添加对 log4net.dll 的引用。

在您的根文件夹中创建一个名为 log4net.config 的基本配置文件。这将在您的 Web 根目录之外的 Logs 文件夹中按日期命名的日志文件中记录错误。

<?xml version="1.0"?>
<log4net debug="false">
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="DatePattern" value="yyyy-MM-dd'.log'" />
        <param name="File" value="..\\Logs\\" />
        <param name="AppendToFile" value="true" />
        <param name="MaxSizeRollBackups" value="30" />
        <param name="MaximumFileSize" value="100MB" />
        <param name="RollingStyle" value="Date" />
        <param name="StaticLogFileName" value="false" />
        <param name="CountDirection" value="-1" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
        </layout>
        <evaluator type="log4net.Core.LevelEvaluator">
            <threshold value="DEBUG" />
        </evaluator>
    </appender>
    <root>
        <level value="ALL" />
        <appender-ref ref="RollingFileAppender" />
    </root>
</log4net>

Properties\AssemblyInfo.cs 文件中,添加以下行。这将在您的应用程序启动时自动从配置文件中配置 log4net。

[assembly: XmlConfigurator(ConfigFile = "./Log4net.config", Watch = true)]

要捕获错误并记录它们,您需要将以下内容添加到 Global.asax.cs

private static readonly ILog m_Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

protected void Application_Error(object sender, EventArgs e)
{
    // Get the error
    Exception exception = Server.GetLastError();

    // Log the error to a text file
    m_Logger.Fatal("Unhandled application error", exception);

    // Redirect to error page
    Response.Redirect("~/Error.aspx");
}

完成这项工作涉及几个步骤,但它们都相当容易完成,一旦 log4net 到位,您就可以轻松地在应用程序的其他地方添加日志记录(而不仅仅是记录未处理的异常)。

【讨论】:

  • 本来打算推荐这个东西,但不确定他是在寻找像为每个异常创建一个唯一的文本文件这样简单的东西还是像 File.Write 这样简单的东西
【解决方案2】:

看看 ELMAH - http://code.google.com/p/elmah/ - 如果您正在寻找可以执行其中一部分(日志记录)的解决方案。

考虑在您的应用程序中为另一部分使用自定义错误。例如ASP.net Custom Errors Loggin

【讨论】:

  • 其实在asp.net中可以做到这一点,我看不出需要第三方应用程序
  • 实际上,我看到了“不需要外部组件”和“询问如何最好地做某事”之间最细微的矛盾。
  • 您可以在 ASP.NET 中做很多事情,而无需使用第三方应用程序,但您真的想重新发明轮子吗?此外,log4net 的建议也很好。我发现 ELMAH 的引用要多得多(我上次检查 log4net 时对于我的项目需要来说有点大),所以我坚持使用它。
【解决方案3】:

Microsoft 模式和实践团队开发了一组应用程序块,用于解决构建 .net 应用程序时的常见问题,称为企业库。他们有一个用于记录的块,称为记录应用程序块。还有另一个块用于封装异常处理,称为异常处理块。

我建议您查看日志记录应用程序块来处理您的日志记录。

Enterprise Library 4.0

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2013-01-12
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多