Har för mig att jag har läst någonstans att man i web.config kan göra så att man ställer in en speciellsida som ska visas när blir fel någonstans, hur gör man det? Eller det kanske finns något bättre sätt att göra sånt på, kan man logga felen på nått sätt?
visa en error-sida.
9 svar · 337 visningar · startad av MagnusJ
Du kan logga felen i din global.asax, under Application_Error.
I web.config kan du lägga till följande taggar (customErrors):
<?xml version="1.0" encoding="iso-8859-1" ?>
<configuration>
<system.web>
<customErrors defaultRedirect="/error500.html" mode="RemoteOnly">
<error statusCode="404" redirect="/error404.html" />
<error statusCode="500" redirect="/error500.html" />
</customErrors>
</system.web>
</configuration>
Notera att det såklart endast gäller ASP.NET-filer. Övriga filer, såsom HTML-filer, måste mappas till .NET-processen i IIS om du vill kunna kontrollera dem i web.config. Annars ställer du in 404 som vanligt i IIS.
Okej.
Sökte efter Application_Error på google och hittade den här artikeln: http://www.developer.com/net/asp/article.php/10917_961301_1
Har en fråga om den, jag fattade inte vad Windows 2000 Event Log är. Är det något som finns i IIS? Går det att använda om man har sidan på ett webbhotell och inte har tillgång till "server-filerna"?
Event log är detsamma som datorns loggbok. Där samlas alla fel, varningar och liknande. Du hittar den under Kontrollpanelen > Administrationsverktyg > Loggboken.
På ett webbhotell har du normalt sett inte tillgång till loggboken. Då kan du exempelvis logga alla filerna till en fil på webbservern i stället, alternativt en databas.
Okej.
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
StreamWriter sw = null;
try
{
FileStream fs = new FileStream( Server.MapPath("error_log.txt"), FileMode.OpenOrCreate, FileAccess.Write );
sw = new StreamWriter( fs, System.Text.Encoding.UTF8 );
sw.Write("Test Web",
"MESSAGE: " + ex.Message +
"\nSOURCE: " + ex.Source +
"\nFORM: " + Request.Form.ToString() +
"\nQUERYSTRING: " + Request.QueryString.ToString() +
"\nTARGETSITE: " + ex.TargetSite +
"\nSTACKTRACE: " + ex.StackTrace,
EventLogEntryType.Error);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (sw != null)
sw.Close();
}
Så det blir nått sånt där?
Japp.
Notera dock att Server.MapPath("error_log.txt") kommer att lägga filen i den mapp där felet uppstod (alltså relativt till roten, till exempel /nyheter/ eller kanske /artiklar/). Om du vill lägga filen i roten av din applikation, ange Server.MapPath("~/error_log.txt") i stället.
Okej.
EventLogEntryType.Error visst har den någonting med EventLog att göra? Att den skriver in felmeddelandet där. Ska jag bara skita i den eller måste jag ersätta den med något?
Hmm, det enda som skrivs ut i logfilen är Test Web. Vad kan det bero på?
Du har förmodligen inte konkantenerat (slagit ihop) strängarna ordentligt.
Pace skrev:
Du har förmodligen inte konkantenerat (slagit ihop) strängarna ordentligt.
Menar du det här?
sw.Write("Test Web",
"MESSAGE: " + ex.Message +
"\nSOURCE: " + ex.Source +
"\nFORM: " + Request.Form.ToString() +
"\nQUERYSTRING: " + Request.QueryString.ToString() +
"\nTARGETSITE: " + ex.TargetSite +
"\nSTACKTRACE: " + ex.StackTrace);
Jag har kollat och kollat och jag ser inget fel, jag har kanske tittat mig blind. Ser ni något galet?
EDIT:
Kom och tänka på, kan det vara det här som är fel
Exception ex = Server.GetLastError().GetBaseException();
Så att den inte har något felmeddelande att skriva ut?