asp.net页面显示友好错误~~~

来源:互联网 发布:windows iis限制 编辑:程序博客网 时间:2024/05/16 11:04

当我们运行asp.net面时,有时候会出错,我们不想让程序崩溃,把这些错误在页面上显示出来。办法如下:

在global.asax中的

void Application_Error(object sender, EventArgs e)
    {
        //在出现未处理的错误时运行的代码
        Exception ex = Server.GetLastError().GetBaseException();
        if (ex != null)
        {
            LogTools.Instance.Log(ex);
            string error = "出错页面:" + Request.Url.ToString() + "<br />";
            error += "异常信息:" + ex.Message + "<br />";
            error += "Source: " + ex.Source.ToString() + "<br />";
            error += "StackTrace: " + ex.StackTrace.ToString() + "<br />";
            Server.ClearError();
            Application["Error"] = error;
            System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ApplicationError.aspx");
        }
    }

添加这些代码。

其中的LogTools类如下:


using System;
using System.IO;
using System.Timers;
using NLog;
using NLog.Config;
using NLog.Targets;

using System.Collections;

public class LogTools
{
    private Logger logger;
    public LogTools()
    {
        LogDate = DateTime.Now;
        SimpleConfigurator.ConfigureForTargetLogging(GetFileTarget());
        logger = LogManager.GetCurrentClassLogger();
    }
    private DateTime logDate;
    public DateTime LogDate
    {
        get { return logDate; }
        set { logDate = value; }
    }
    //单例对象
    private static LogTools log;
    public static LogTools Instance
    {
        get
        {
            if (log == null)
            {
                log = new LogTools();
            }
            else
            {
                if (log.logDate.Date != DateTime.Now.Date)
                {
                    log = new LogTools();
                }
            }
            return log;
        }
    }
    //记录异常信息
    public void Log(Exception ex)
    {
        try
        {
            logger.Info(ex.Message + "/r /n" + ex.StackTrace);
        }
        catch
        {
           
        }
    }
    //记录字符串信息
    public void Log(string message)
    {
        try
        {
            logger.Info(message);
        }
        catch
        {
       
        }
    }
    //获取一个Log文件
    private string GetLogFile()
    {
        string fileName = "Log_" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
        return Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Error_Logs", fileName);
    }
    //设置Log输出的目标信息
    private FileTarget GetFileTarget()
    {
        FileTarget ft = new FileTarget();
        ft.FileName = GetLogFile();
        ft.Layout = "${longdate} ${message}";
        ft.KeepFileOpen = false;
        ft.Encoding = "iso-8859-2";
        ft.OpenFileCacheTimeout = 10;
        ft.OpenFileCacheSize = 1;
        return ft;
    }
}