Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Web应用程序中记录日志时出错_C#_Asp.net_Error Handling_Error Logging - Fatal编程技术网

C# 在ASP.NET Web应用程序中记录日志时出错

C# 在ASP.NET Web应用程序中记录日志时出错,c#,asp.net,error-handling,error-logging,C#,Asp.net,Error Handling,Error Logging,如果发生异常,应将其记录到文本文件中。并且应该将用户重定向到向用户解释错误的页面 我从哪里开始?看看ELMAH——如果您正在寻找一个解决方案,它将执行这一部分(日志记录) 研究在应用程序中为其他部分使用自定义错误。例如,看看ELMAH——如果您正在寻找一个解决方案来执行其中的一部分(日志记录) 研究在应用程序中为其他部分使用自定义错误。例如,Microsoft模式和实践团队开发了一组应用程序块,用于解决构建.net应用程序时的常见问题,称为企业库。它们有一个用于记录的块,称为记录应用程序块。还有

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

我从哪里开始?

看看ELMAH——如果您正在寻找一个解决方案,它将执行这一部分(日志记录)

研究在应用程序中为其他部分使用自定义错误。例如,

看看ELMAH——如果您正在寻找一个解决方案来执行其中的一部分(日志记录)


研究在应用程序中为其他部分使用自定义错误。例如,Microsoft模式和实践团队开发了一组应用程序块,用于解决构建.net应用程序时的常见问题,称为企业库。它们有一个用于记录的块,称为记录应用程序块。还有另一个用于封装异常处理的块,称为异常处理块

我建议查看日志应用程序块以处理日志记录


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

我建议查看日志应用程序块以处理日志记录


我建议使用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>
要捕获错误并记录它们,您需要将以下内容添加到
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就位,您就可以轻松地在应用程序的其他地方添加日志记录(而不仅仅是记录未处理的异常)。

我建议使用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>
要捕获错误并记录它们,您需要将以下内容添加到
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就位,您就可以在应用程序的其他地方轻松添加日志记录(而不仅仅是记录未处理的异常)。

使用try-catch块。在web.config中配置文件的位置,并使用try-catch块添加文件参数。实际上,我需要将错误记录到文本文件中。是否要将每个异常记录到其自己的唯一文件中?或者您希望将所有异常记录到一个文件中吗?无论哪种方式都可以。。。。但我很可能更喜欢它只是一个文件,使用try-catch块。在web.config中配置文件的位置,并使用try-catch块添加文件参数。实际上,我需要将错误记录到文本文件中。是否要将每个异常记录到其自己的唯一文件中?或者您希望将所有异常记录到一个文件中吗?无论哪种方式都可以。。。。但我最喜欢的可能是1个文件事实上,我认为在asp.NET中不需要第三方应用程序。实际上,我看到了“不需要外部组件”和“询问如何最好地做某事”之间最细微的矛盾。你可以在asp.NET中做很多事情,而不需要使用第三方应用程序,但是你真的想重新发明轮子吗?此外,对log4net的建议也很好。我发现ELMAH被引用的次数要多得多(上次我检查log4net时,我的项目要求有点大),所以我坚持使用它。事实上,我不认为在asp.NET中可以使用第三方应用程序时需要第三方应用程序,我看到了“不需要外部组件”和“询问如何最好地做某事”之间最细微的矛盾。你可以在ASP.NET中做很多事情,而无需使用第三方应用程序,但你真的想重新发明轮子吗?此外,对log4net的建议也很好。我发现ELMAH被引用的次数要多得多(上一次我检查log4net时,对于我的项目要求来说有点大),所以我一直坚持着。本来打算推荐这个东西,但是不确定他是在寻找像为每个异常创建唯一文本文件这样简单的东西,还是像文件这样简单的东西。WriteWas打算推荐这个东西,但是不确定他是在寻找像为每个异常创建唯一文本文件这样简单的东西每个异常或像File.Write这样简单的东西