Aug 052008
 

Wie einige von euch sicher bemerkt haben, jedenfalls habe ich es bemerkt,
war mein Blog, meine Blogs, heute sehr lange offline. Eigentlich seit
gestern 19.00Unr bis Heute ca. 17.00Uhr.

Ich wusste, dass ich gestern nichts gemacht habe. Jedenfalls denke ich das.
Also war ich mir ganz sicher, dass es am Server liegen muss. Entsprechend
habe ich meinem Hoster geschrieben und wurde langsam aber sicher
nervös. Der freundliche Herr auf der anderen Seite hat dann mal den AppPool
neu gestartet, aber das Web war sofort wieder down.

Da hatte ich schon ein Déjà-vu. So ähnlich fingen die Probleme beim alten
Hoster an.

Nach der Arbeit eilte ich schnell nach Hause. Ich wollte dem Problem auf die
Spur kommen. Ich wusste, ich müsste eigentlich nur an die Eventlog’s des Server’s
kommen. Dann wüsste ich schnell was los wäre. Aber welcher SharedHoster lässt
das schon zu.

Ich versuchte es aber trotzdem. Ich nutzte eine Subdomain wo ich Änderungen an meinem Blog
teste. Dort habe ich alles gelöscht. Ich baute mir eine kleine Webseite die mir
das Eventlog ausliest, einwenig filtert und nach dem Datum sortiert.

Zu meiner Überraschung klappte das sogar. Ich konnte das Eventlog auslesen.
Allerdings war ich überrascht was den Schuldigen anbelangt. Das war ich selber. 🙂

Log

Irgend wie habe ich am Testblog etwas geändert. Ich weiss einfach nicht
was und wann.

Und wie liest man nun das Eventlog aus? Hier einwenig Code.

default.aspx (aber nicht komplett)

<div>
        <asp:DropDownList ID="ddlLog" runat="server">
            <asp:ListItem>Application</asp:ListItem>
            <asp:ListItem>System</asp:ListItem>
        </asp:DropDownList>
        <asp:CheckBox ID="cboError" runat="server" Checked="True" Text="Error" />
        <asp:CheckBox ID="cboWarning" runat="server" Checked="True" Text="Warning" />
        <asp:CheckBox ID="cboInformation" runat="server" Checked="True" 
            Text="Information" />
        <asp:CheckBox ID="cboSuccessAudit" runat="server" Checked="True" 
            Text="SuccessAudit" />
        <asp:CheckBox ID="cboFailureAudit" runat="server" Checked="True" 
            Text="FailureAudit" />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Items: "></asp:Label>
        <asp:TextBox ID="tbItems" runat="server">250</asp:TextBox>
        <br />
        <asp:Button ID="cmdLoad" runat="server" onclick="cmdLoad_Click" Text="load" 
            Width="108px" />
        <br />
        <asp:Label ID="labError" runat="server" Text=""></asp:Label>
        <asp:GridView ID="dg" runat="server" BackColor="LightGoldenrodYellow" 
            BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" 
            GridLines="None">
            <FooterStyle BackColor="Tan" />
            <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" 
                HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
            <HeaderStyle BackColor="Tan" Font-Bold="True" />
            <AlternatingRowStyle BackColor="PaleGoldenrod" />
        </asp:GridView>
    </div>

default.aspx.cs (auch nur das Wichtigste)

protected void Page_Load(object sender, EventArgs e)
{
}

protected void cmdLoad_Click(object sender, EventArgs e)
{
	EventLog el = null;

	//Hier kommen alle Events rein damit sie sortiert werden können.
	List<EventLogEntry> entrys = new List<EventLogEntry>();

	try
	{
		//Das Eventlog laden das selektiert ist.
		el = new EventLog(ddlLog.SelectedValue);

		foreach (EventLogEntry entry in el.Entries)
		{
			if ((cboError.Checked) && 
				(entry.EntryType == EventLogEntryType.Error))
			{
				entrys.Add(entry);
			}

			if ((cboWarning.Checked) && 
				(entry.EntryType == EventLogEntryType.Warning))
			{
				entrys.Add(entry);
			}

			if ((cboInformation.Checked) && 
				(entry.EntryType == EventLogEntryType.Information))
			{
				entrys.Add(entry);
			}

			if ((cboSuccessAudit.Checked) && 
				(entry.EntryType == EventLogEntryType.SuccessAudit))
			{
				entrys.Add(entry);
			}

			if ((cboFailureAudit.Checked) && 
				(entry.EntryType == EventLogEntryType.FailureAudit))
			{
				entrys.Add(entry);
			}
		}

		//Die Logs nach Datum sortieren.
		entrys.Sort(EntrySorter);

		//Die Eventlog Einträge an ein DataGrid binden.
		dg.DataSource = entrys.GetRange(0, 
			entrys.Count > int.Parse(tbItems.Text) ? 
			int.Parse(tbItems.Text) : entrys.Count - 1);
		this.DataBind();
	}
	catch (Exception ex)
	{
		labError.Text = ex.ToString();
	}
	finally
	{
		el.Close();
	}
}

//Sortiert nach dem Datum
private static int EntrySorter(EventLogEntry x, EventLogEntry y)
{
	return y.TimeWritten.CompareTo(x.TimeWritten);
}

Der Code ist nicht über alles erhaben. Aber er tut. Das sieht dann etwa so aus.

So sieht das Ergebnis aus.

Das dürfte aber noch lange nicht überall funktionieren. Ich gehe mal davon aus

das die meisten SharedHoster das nicht erlauben.

Sorry, the comment form is closed at this time.