webForumDet fria alternativet

visa en error-sida.

9 svar · 337 visningar · startad av MagnusJ

MagnusJMedlem sedan apr. 2004150 inlägg
#1

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?

PaceMedlem sedan juni 20019 024 inlägg
#2

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.

MagnusJMedlem sedan apr. 2004150 inlägg
#3

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"?

PaceMedlem sedan juni 20019 024 inlägg
#4

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.

MagnusJMedlem sedan apr. 2004150 inlägg
#5

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?

PaceMedlem sedan juni 20019 024 inlägg
#6

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.

MagnusJMedlem sedan apr. 2004150 inlägg
#7

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?

MagnusJMedlem sedan apr. 2004150 inlägg
#8

Hmm, det enda som skrivs ut i logfilen är Test Web. Vad kan det bero på?

PaceMedlem sedan juni 20019 024 inlägg
#9

Du har förmodligen inte konkantenerat (slagit ihop) strängarna ordentligt.

MagnusJMedlem sedan apr. 2004150 inlägg
#10

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?

136 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)