2009-11-17 4 views
6

Ich schreibe einige Protokolle in das Ereignisprotokoll Einstellung der Microsoft Enterprise Library miteine ‚Kategorie‘ in der .net Enterprise Library Logging (zum Ereignisprotokoll)

Die Protokolle weg gut, aber tut die Kategorie zu setzen scheinen schreibt im Ereignisprotokoll. Die Kategorie erscheint ordnungsgemäß im Nachrichtentext des Protokolls (wenn ich das setze), aber die Ereignisanzeige hebt die Kategorie nicht auf.

Was fehlt mir?


C# Quelle

LogEntry log = new LogEntry(); 
log.Message = "Test"; 
log.Categories.Add("Event"); 
Logger.Write(log); 

Web-Config

<loggingConfiguration name="Logging Application Block" tracingEnabled="true" 
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true"> 
<listeners> 
    <add source="TestLogSource" formatter="Text Formatter" log="TestLog" 
    machineName="" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FormattedEventLogTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FormattedEventLogTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    name="Formatted EventLog TraceListener" /> 
</listeners> 
<formatters> 
    <add template="Timestamp: {timestamp}&#xD;&#xA;Message: {message}&#xD;&#xA;Category: {category}&#xD;&#xA;Severity: {severity}" 
    type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    name="Text Formatter" /> 
</formatters> 
<categorySources> 
    <add switchValue="All" name="Events"> 
    <listeners> 
     <add name="Formatted EventLog TraceListener" /> 
    </listeners> 
    </add> 
    <add switchValue="All" name="General"> 
    <listeners> 
     <add name="Formatted EventLog TraceListener" /> 
    </listeners> 
    </add> 
</categorySources> 
<specialSources> 
    <allEvents switchValue="All" name="All Events" /> 
    <notProcessed switchValue="All" name="Unprocessed Category" /> 
    <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
    <listeners> 
     <add name="Formatted EventLog TraceListener" /> 
    </listeners> 
    </errors> 
</specialSources> 

+0

'log.Categories.Add (" Ereignis ** s ** ");'? –

+0

meinen Sie, dass Sie Ihre protokollierten Ereignisse in Ihrer eigenen Kategorie in der Ereignisanzeige sehen möchten? Oder wenn Sie es in der Ereignisanzeige anzeigen, können Sie die Kategorie in den Details nicht sehen? – curtisk

Antwort

5

Die EventLog Kategorie ist getrennt und verschieden von den LogEntry Kategorien. Ich denke also nicht, dass Sie die LogEntry-Kategorien verwenden können, um sie im Feld EventLog-Kategorie anzuzeigen.

Aus Datenperspektive sind die Typen inkompatibel: Die Kategorie EventLog ist kurz, während die Kategorien LogEntry eine Zeichenfolge sind. Ja, in der Ereignisanzeige wird eine Zeichenfolge angezeigt, aber dieser Wert wird über eine CategoryMessageFile nachgeschlagen, die in der Registrierung definiert ist.

Wenn Sie eine Filterung in der Ereignisanzeige durchführen möchten, können Sie die LogEntry.EventId-Eigenschaft verwenden. Sie können dies mit einer beliebigen Konvention füllen. z.B. eindeutige Ereignis-IDs für jeden Protokollierungspunkt, eine Ereignis-ID pro Ebene, eine Ereignis-ID pro Klasse oder eine andere Konvention.

Als Fallback können Sie immer eine Suche nach Ihrer Kategorie in der Beschreibung des EventLog-Eintrags durchführen.

1

Dieser Link (http://drdobbs.com/184405714) enthält weitere Informationen zum Erstellen der Kategorie.

+0

ein weiterer hilfreicher Link zur Ereigniskategorie - http://msdn.microsoft.com/en-us/library/system.diagnostics.eventsourcecreationdata.categoryresourcefile.aspx – Rajes