c# - 在ASP.NET Web应用程序中记录错误

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

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

我从哪说起呢?

最佳答案

我建议使用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就绪,您就可以轻松地在应用程序中的其他位置添加日志记录(而不仅仅是记录未处理的异常)。

关于c# - 在ASP.NET Web应用程序中记录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5531859/

相关文章:

c# - LINQ 使用 "like"而不是 "(( NVL(INSTR(x, y), 0) ) = 1)"

c# - Entity Framework 6 Code First 查找表未填充

asp.net - 错误 "dotnet : Could not find any project in ` C :\** ."when running "dotnet add package Microsoft. AspNetCore.Authentication.MicrosoftAccount”

asp.net - 在asp.net中为GridView SqlDataSource动态构建SelectCommand

reflection - Camel 在aggregationStrategy处访问prevRouteContext

c# - 使用 Automapper (.net c#) 映射到不在 Src 中的变量以便在 linq2sql 类中使用?

asp.net - 休眠死锁

java - 使用 tomcat 和 servlet 捕获异常

error-handling - 替代适用于迭代器映射的 try (?) 运算符

c# - ASP.NET MVC 3 - 在 Post Redirect Get 工作流中检测当前页面是否被重定向到