| 

.NET C# Java Javascript Exception

1
Kann es wirklich sein, dass man per default auf dem TraceListener für das Eventlog keine "Source" und keine "Task Category" im Code erstellen kann? Wie will ich ohne diese Angaben im Eventlog etwas filtern?

Wir fangen gerade ein neues Projekt an. Eigentlich möchte ich die Enterprise Library nutzen. Allerdings scheitere ich schon am LAB. Ich kann die Source nur in der app.config definieren. Ist also immer gleich. Zudem kann man keine "Task Category" definiren. Also nichts mit filtern im Eventlog.

Oder habe ich da was übersehen?
News:
14.12.2009
GENiALi 2,5k 1 2 8
GENiALi 2,5k 1 2 8
1 Antwort
2
Hi, die Source ist natürlich pro Application immer gleich und sollte der Name der Application sein.

Eine Categorie kannst du als zweiten Paramerter bei Writeline() mit übergeben.

Trace.WriteLine("My second error message.", category);


Edit: Ups, hab gerade gelesen, dass der EventLogTraceListener da ein Bug hat. Der gibt immer Category ID 0 aus, egal was man angibt.

Als Abhilfe bleibt dir da wohl nur einen eigenen TraceListener zu schreiben ;-)
Indem du zum Bsp. die Methoden überschreibst, in etwa so:

public class MyEventLogTraceListener : TraceListener
{
private EventLog ev = new EventLog("MyLogName",
Environment.MachineName, "MyLogSource");

public override void Write(string o)
{
ev.WriteEntry(o, EventLogEntryType.Information, 123, 1);
}

public override void WriteLine(string message)
{
this.Write(message);
}
}


Edit2:

Mit dem erstellst du die eigentliche Klasse zur Verwaltung des Eventlogs. Wobei
"MyLogName" in der Ereignisanzeige links im Baum eins der Zweige (Application, Security, System, ...) ist. "MyLogSource" ist dein Programmname.
private EventLog ev = new EventLog("MyLogName",Environment.MachineName, "MyLogSource");


In der Zeile:
ev.WriteEntry(o, EventLogEntryType.Information, 123, 1);

schreibst du den eigentlichen Logeintrag. Wobei "o" der Fehlermeldungsstring ist, EventlogEntryType das Symbol des Logeintrags verändert, "123" ist deine Fehlernummer = Ereignisnummer in der Ereignisanzeige, und 1 die Kategorie "Geräte" wiederspiegelt.

Kategorien kann man auch selbst definieren, siehe dazu http://www.ddj.com/windows/184405714

GENiALi schrieb:
Man kann ja schon was in der Art Kategorie übergeben. Daber damit wird nur entschieden wo hin das Log gehen soll.

Also die CategoryID ist eigentlich die Zurordnung (0=keine,1=Geräte,2=Festplatte,3=Drucker usw.). Was du mit wohin das Log gehen soll meinst, kann ich gerade nicht nachvollziehen.

GENiALi schrieb:
Allerdings finde ich keine Beispiele die mir Zeigen wie ich an alle Daten des LogEntry komme.

Ich nehme mal an, du willst soetwas machen:
EventLogEntry entry = new EventLogEntry();
entry.CategoryNumber = 1;
entry.EventID = 123;
entry.Message = "Testnachricht xyz";
entry.UserName = "Tester";
logger.WriteEntry(entry, EventLogEntryType.Warning);

DAS GEHT JEDOCH NICHT! Die Methoden sind nur zum Lesen. Microsoft sieht nur die WriteEntry-Methode vor, um Einträge hinzuzufügen.

Grüßle
14.12.2009
Scout 1,4k 2 8
Scout 1,4k 2 8
Wo hast du das mit dem Bug gefunden?
Man kann ja schon was in der Art Kategorie übergeben. Daber damit wird nur entschieden wo hin das Log gehen soll.
GENiALi 14.12.2009
Bin gerade dabei. Allerdings finde ich keine Beispiele die mir Zeigen wie ich an alle Daten des LogEntry komme.
GENiALi 15.12.2009
Weiß gerade nicht was du gemacht hast bzw. wo es hängt.
Wenn ich das richtig verstehe, hast du deinen eigenen Listener abgeleitet und die Write bzw. WriteLine Methode überschrieben. Erklärung siehe Edit2 oben.
Scout 15.12.2009

Stelle deine Windows-Frage jetzt!