2009-11-18 7 views

risposta

23

EventIds sono applicazioni specifiche in modo da poter utilizzare qualsiasi gamme che ti piace. Solo garantire a documentare quello che hai utilizzato e dove in modo da poter essere sicuri di non utilizzare un ID due volte, o per facilitare più facile il debug.

Ma tenere a mente ...

Come quando Henry Ford ha detto che "si può avere qualsiasi colore che si desidera, purché sia ​​nero" - è anche possibile utilizzare qualsiasi intervallo che si piace fino a quando tale intervallo cade dentro l'intervallo di 0 e 65535.

+1

dove 65535 è 'ushort.MaxValue' –

5

In effetti, è compito dell'autore definire e tenere traccia degli ID evento che utilizzano e del loro significato.

Qui è un riferimento: http://msdn.microsoft.com/en-us/library/e29k5ebc.aspx - Particolarmente interessante è la parte di non scrivere i messaggi con indirizzi IPv6 (a causa del carattere %) nel registro degli eventi. Scommetto che puoi usare un parametro per ovviare a questo però.

0

Edit1: ho provato questo e non è vero che è eventID 32bit. Ha solo 16 bit.

eventId è Int32, da -2.147.483.648 a 2,147,483,647

EventLog.WriteEntry Method (String, String, EventLogEntryType, Int32)

public static void WriteEntry(
    string source, 
    string message, 
    EventLogEntryType type, 
    int eventID 
) 
+1

Sì, accetta un parametro int32 come parametro, ma se si immette un valore int che non è compreso nell'intervallo 0 e 65535 genera un'eccezione. –

+2

Sì. Hai ragione.L'ho provato ora e sono sorpreso che MS affermi che sia a 32 bit ... – MrHIDEn

+1

Sfortunatamente, molte API evitano i tipi di interi senza segno. Sono [non conformi a CLS] (http://stackoverflow.com/questions/6325/why-are-unsigned-ints-not-cls-compliant). –

-1

Tecnicamente è possibile utilizzare qualsiasi valore tra 1 - 65536 per quello.

Ma se sei una persona che scrive tonnellate di registro dettagliato, come me, lo troverete difficile mettere in relazione una serie di voci insieme, allora vorrei suggerire di generare un valore unico a caso ogni volta che il codice viene eseguito con questo si in grado di identificare gli eventi, anche l'idea migliore sarebbe quella di creare il proprio log & fonte di utilizzare questo invece di scrivere tutto nel registro dell'applicazione. come

Random rnd = new Random(); 
EventId = rnd.Next(0, 65535); 
+0

Posso sapere il motivo del voto negativo? –

+1

Probabilmente perché lo scopo dell'evento è quello di identificare in modo univoco lo _tipo di evento_. Tutti gli eventi dello stesso tipo dovrebbero avere lo stesso id. Ciò consente ad esempio che il monitoraggio automatico possa intraprendere determinate azioni quando si verificano determinati eventi. Assegnare un ID casuale sfida questo scopo – Pete

+0

@Pete Questo ha senso quando si accede al registro dell'applicazione anche se era solo un suggerimento. –

1

I bit hi dell'ID sono riservati per i test, debug e altre bandiere utilizzate per lo sviluppo. I bit utilizzabili sono:

0x0000 - 0xFFFF

See: Event Message Structure

I bit superiori dovrebbero essere evitati, ma tutti i valori per i bit di fondo sono disponibili se si crea un'origine personalizzata. Se usi un sistema o una fonte preesistente, scontrerai e probabilmente otterrai il messaggio sbagliato. I messaggi sono presi dal file DLL dei messaggi delle sorgenti registrati. Un file di messaggi personalizzati può essere creato utilizzando il compilatore di file di messaggi dell'SDK.