28. oktober 2010 - 15:25Der er
30 kommentarer og 2 løsninger
Global.asax
Hej, Jeg er ved at forsøge mig med et alternativ til at fejlhåndtere via web.config filen, og er i den forbindelse faldet over at man kan gøre det via global.asax. Men det virker ikke til at være lige til. Ihvertfald kan jeg ikke rigtig få det til at virke. Det jeg forsøger er at skrive fejlbeskeden til en tekst fil. Jeg har også fejlhåndtering via database, men i det tilfælde at det er databasen der fejler, vil det være rart at man kan se fejlen alligevel. Men jeg kan ikke få global.asax til at skriv til den fil. det går fint med at oprette, men der kommer intet i filen og desuden låser applikationen. Jeg har forsøgt at lave en redirect når der er skrevet til filen, men den virker heller ikke. Er der nogen derude der har lavet noget tilsvarende ? Mvh Henrik
jeg vil anbefale dig at kigge på en helt anden teknologi, nemlig NLog, som er et open-source produkt der er utrolig fleksibelt og kan skrive loginformation til et væld af steder, så som databaser, console, eventviewer i windows, tekstfiler og andet. Det er et rigtig stabilt assemply, og hvis det skal bruges i produktion, vil jeg anbefale at bruge version 1, men hvis det er til udvikling kan version 2 bruges, men den er kun i beta.
Tak for jeres svar @mcb2001 Er det ikke noget der skal installeres på serveren?
@bkp jeg har haft kigget på elmah, men det ser ud som om det udelukkende bruger databaser. Og jeg ville gerne kunne skrive til en fil såfremt database serveren er nede.
@keysersoze Jeg bruger Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Jeg har ikke prøvet at debugge. Det kører på en live server, men er der ikke noget med at man kan debugge ved at sætte debug = true og så er der en trace fil?
Hvad hvis du kører det lokalt? Sæt et debug-mærke i starten af Application_Error og bevæg dig ned til hvor problemet opstår - et gæt til hvorfor applikationen låser er at der sker en fejl inde i din log-kode og så vil du risikere en uendelig løkke hvilket netop låser applikationen.
Hvis du ikke kan debugge lokalt så må du pakke din kode ind i en try/catch og i catchen logge fejlen til databasen så du kan se hvor i global.asax det går galt - et gæt er at det er noget omkring rettigheder.
Det er ikke et program der skal installeres på serveren, men en DLL der skal importeres i dit web-site i visual studio solutionen. Når du så compiler får du både dit eget site + denne DLL og config-fil med ud.
Så skal du bare publishe det hele ud på din webserver.
Så det er altså i Visual Studio du skal lave arbejdet.
Hej Alle sammen, Tusind tak for jeres svar. Jeg har siddet og bakset lidt med det her til morgen, og det er kommet til at virke. Det var en af linierne i det der blev skrevet til tekstfilen der fik det hele til at låse. Så nu virker det. Men jeg må da sige at der findes en del forskellige logging værktøjer. Hvad der er bedst er nok en smagssag. men jeg vil nok kigge nærmere på de forskellige når jeg får en ledig stund. Indtil videre vil jeg nøjes med min egen lille tekstfil. Men nu har jeg selvfølgelig et problem. Hvem skal have point. I har alle været hjælpsomme. Er der ikke noget med at man kan dele point? I så fald kan I der vil have point ikke skrive et svar, og så forsøger jeg at dele de point der er mellem jer. I hvertfald tak for jeres svar.
@bkp Jeg har kigget på nlog, men jeg kunne ikke rigtig genneskue hvor den nlog.config fil skulle ligge. Det har jeg så fundet ud af nu. nlog.dll skal være i bin. Er der andet man skal sætte op så?
Og point skal du tildele til dem du mener har været med til at løse din problemstilling, så hvis du selv er kommet frem til en løsning, på baggrund af hjælp fra tre mennesker, så vil jeg dele points i fire, en bunke til hver og resten til dig selv, da vi ikke gav dig den endelige løsning.
Jeg ved ikke om jeg fortjener point på denne da det egentlig var mcb2001 der startede ud med at nævne nLog :-)
Men der er faktisk ikke andet du skal sætte op andet at lave en reference til nlog og bruge den når du vil logge.
Det smarte er at hvis du på et tidspunkt vil logge på en anden måde, eller lave tilretninger i de data der skal gemmes, så gøres dette bare i config filen.
jeg er ganske enig. Det er rart det er styret i en config fil, så du ikke skal kode om bare fordi du vil logge andetsteds. Men jeg synes også du bør overveje at give dig selv nogle af pointene.
Nu har jeg fået det til at virke. men nu har jeg sat customerrors op. Og så bliver der ikke logget noget. Men er det korrekt at hvis jeg gerne vil have logget en fejl, der er pakket ind i en try catch, så skal jeg lægge kaldet til nlog i catch delen og så vil fejlen blive logget?
Det fordi jeg har en database som driller. En til 2 gange om måneden lukker den for brugeren som så bevirker at indholdet ikke bliver vist. Jeg vil gerne have at vide, dels med en email og dels vil jeg gerne have nogen flere informationer om hvorfor. Jeg ved ikke om det er muligt med nlog, men jeg ville også gerne vide klientens IP, informationer omkring browser osv. men jeg ved ikke helt hvad for en parameter jeg skal sætte ind.
jeg kan ikke få den til at logge de ændringer jeg laver til nlog.config. Hvad skal man gøre for at få den til det? Og så vil jeg gerne have at den bruger datoen som filnavn, men den bliver ved med at skrive minutter altså dagminutterår istedet for dagmånedår(DDMMYY)
he he, ok, så er det vel fint nok at håndtere den med debug. Min side kører jo videre men uden database støtte. Og det er betop det jeg skal bruge det til. At vide hvad der gik galt, hvornår. Og at jeg så, så hurtigt som muligt kan genstarte databasen så den virker igen. Det er så en lidt spøjs fejl med databasen, men den tager jeg i en anden tråd. Ved du hvorfor mine ændringer ikke bliver vist? Er der noget jeg skal slette for at få den til at æde mine ændringer?
Ja det fandt jeg ud af. men jeg tror at der er en parameter til <nlog> som gør at den automatisk genindlæser filen. autoReload="true". Eller det vil jeg ihvertfald se om det virker.
Jeg kan ikke finde noget dokumentation på når man har flere targets. Nu har jeg både en fil og en mail, men jeg kan ikke få den til at sende nogen mail. Skal man tilføje en rule til mail target?
Ja, der skal tilføjes en rule mere som henviser til din mail target. Husk dog at ikke alle mail funktioner virker i version 1, du bør nok bruge version 2 hvis du vil bruge mail funktion.
Det smarte ved at have flere regler er jo at du f.eks. kan sætte din mail regel til kun at sende fejl, og din fil regel til at logge alt fra debug og opefter.
Det virker fint. Iøvrigt hvis man sætter <nlog autoReload="true"> så bliver ændringer gennemført med det samme.
Er der nogen mulighed for at logge klientens IP og browser indstillinger. Jeg vil meget gerne vide hvilke browser versioner der bruges når databasen går ned. Det skulle være mærkeligt hvis det har noget med klentens browser at gøre, men jeg vil gerne kunne udelukke at det er det. Men jeg kan ikke lige gennemskue om der er nogen af de muligheder som indeholder de oplysninger.
Jeg er temmelig tæt på målet nu:-) Jeg har fået sat nlog op til både at skrive til fil og mail. Og hvis så jeg bare kunne logge de browser informationer som ligger i server variablerne så er jeg en glad mand. Og hvis ikke det kan, er det også fint. Hovedsagen er at jeg bliver informeret om at der er opstået en fejl så hurtigt som muligt. Alternativt, kan man selvfølgelig gemme den tekstfil som jeg oprindeligt var inde på. Og hvis man så logger tidspunktet kan man jo sammenligne de informationer hvis en fejl opstår. men jeg kan så forstå at der ikke er nogen af jer der logger den slags.
Ja ja, den er jeg med på på. Det var om der var en måde igennem nlog hvorpå man kunne gemme de informationer. Jeg ved godt hvordan man henter informationerne ud via koden :-)
men jeg har fundet en løsning, hvis der er andre der ude som skulle sidde med samme problem på et tidspunkt. Løsningen er at man i global.asax filen tilføjer de informationer til de exception der logges. Jeg har så valgt at lave det med html kode så hvis man vil præsentere det på en side, vil det stå pænt. Så her er min kode i global.asax: ---------------------- Dim lastexception As Exception = Server.GetLastError() Dim logger As NLog.Logger = NLog.LogManager.GetCurrentClassLogger() Dim clientString As New StringBuilder clientString.AppendLine("<!-- //-------Error info start------- // -->") clientString.AppendLine("<table>") clientString.AppendLine("<tr><td>Client IP: </td><td>" & Request.ServerVariables("remote_addr") & "</td></tr>") clientString.AppendLine("<tr><td>Local adress: </td><td>" & Request.ServerVariables("LOCAL_ADDR") & "</td></tr>") clientString.AppendLine("<tr><td>Server info: </td><td>" & Request.ServerVariables("ALL_HTTP") & "</td></tr>") clientString.AppendLine("<tr><td>Error description: </td><td>" & lastexception.ToString & "</td></tr>") clientString.AppendLine("</table>") clientString.AppendLine("<!-- //-------Error info end-------// -->") logger.Fatal(clientString.ToString) ---------------------
Det er dem her jeg tænker på: ${asp-application} - ASP Application variable. ${aspnet-application} - ASP.NET Application variable. ${aspnet-request} - ASP.NET Request variable. ${aspnet-session} - ASP.NET Session variable. ${aspnet-sessionid} - ASP.NET Session ID. ${aspnet-user-authtype} - ASP.NET User variable. ${aspnet-user-identity} - ASP.NET User variable. ${asp-request} - ASP Request variable. ${asp-session} - ASP Session variable.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.