ASP.net Пользовательские ошибки Loggin - PullRequest
1 голос
/ 27 октября 2010

Я использую атрибут customErrors файла web.config для представления пользовательских страниц ошибок:

<customErrors mode="On" defaultRedirect="/errorpage.aspx">
    <error statusCode="404" redirect="/404Page.aspx"/>
    <error statusCode="403" redirect="/403page.aspx"/>
</customErrors>

Ничего особенного. Теперь я хочу записать ошибку, которая возникает при загрузке любой из этих страниц. Меня особенно интересуют любые исключения, мне все равно, на какой странице был пользователь, когда он получил 404.

Я бы хотел записать исключение и записать его в таблицу БД. Будет ли что-то вроде этой работы:

//errorpage.aspx
public void Page_Load(object sender,EventArgs e)
{
    Exception objErr = Server.GetLastError().GetBaseException();
    var err = new {Url = Request.Url.ToString(),
                   Message = objErr.Message,
                   Trace = objErr.StackTrace.ToString()};

    db.Errors.InsertOnSubmit(err);
    db.SubmitChanges();

    Server.ClearError();
}

Есть ли какая-либо другая информация, которая заслуживает сбора или обычно фиксируется при ошибке?

Ответы [ 3 ]

2 голосов
/ 27 октября 2010

Я думаю, что есть лучшие способы сделать это:

  1. Использование ELMAH !
  2. Запустите ваш код в событии Global.asax Application_Error.

void Application_Error(object sender, EventArgs e)
{
   Exception ex = Server.GetLastError().GetBaseException();
   EventLog.WriteEntry("Test Web",
     "MESSAGE: " + ex.Message + 
     "\nSOURCE: " + ex.Source +
     "\nFORM: " + Request.Form.ToString() + 
     "\nQUERYSTRING: " + Request.QueryString.ToString() +
     "\nTARGETSITE: " + ex.TargetSite +
     "\nSTACKTRACE: " + ex.StackTrace, 
     EventLogEntryType.Error);
}
0 голосов
/ 27 октября 2010

Почему бы вам просто не использовать журнал сервера приложений , что случилось, если ошибка / исключение вызвано невозможностью доступа к базе данных. Вот как я регистрирую ошибки на каком-то веб-сайте:

public static void WriteException(Exception exception)
{
    EventLog eventLog = null;
    try
    {
        StringBuilder message = new StringBuilder();
        message.Append("[").Append(exception.Source).Append(" - ").Append(exception.GetType().FullName);
        message.Append("]").Append(@"\r\n").Append(exception.ToString());              

        eventLog = new EventLog();
        eventLog.Log = "LOG_FILE_NAME";
        eventLog.Source = "APP_IDENTIFIER";
        eventLog.WriteEntry(message.ToString(), EventLogEntryType.Warning);
    }
    catch (Exception ex) {/*DO-NOTHING*/ string msg = ex.Message; }
    finally { if (eventLog != null) { eventLog.Dispose(); } eventLog = null; }
}
0 голосов
/ 27 октября 2010

Вместо того, чтобы кататься по своему усмотрению, вы рассматривали возможность использования чего-то вроде Эльмы, который может справиться с этим для вас:

http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

...