2010-06-30 24 views
13

Sto provando a leggere i registri eventi per la mia applicazione EventLoggingApp. Il problema è la lettura dei registri per la mia unica fonte (EventLoggingApp).Leggi registro eventi C#

Questo codice legge i registri per ogni origine. Qual è il problema? Qualche consiglio?

static void ReadEvenLog() 
{ 
    string eventLogName = "Application"; 
    string sourceName = "EventLoggingApp"; 
    string machineName = "Tom"; 

    EventLog eventLog = new EventLog(); 
    eventLog.Log = eventLogName; 
    eventLog.Source = sourceName; 
    eventLog.MachineName = machineName; 

    foreach (EventLogEntry log in eventLog.Entries) 
    { 
     Console.WriteLine("{0}\n",log.Source); 
    } 
} 

risposta

-2

Se ci si connette a localhost impostare MachineName su "." Verificare se l'utente ha diritto di leggere dal registro eventi

+1

Dal momento che ottiene tutti i registri dalla sua macchina, non ci sono problemi di sicurezza. – atamanroman

4

Controllare questo article su MSDN. Non è possibile leggere le voci del registro eventi per origine. Solo il nome del registro è importante. Invece è possibile creare un registro eventi separato per l'applicazione o filtrare le voci verificando la proprietà Source di ogni voce nel ciclo foreach.

+2

Thx, vengo dalla Slovacchia, la tua eng è molto meglio della mia :) – Tom159

1

MSDN (1)(2) dice che Source è solo per scrivere registri eventi.

Non è necessario specificare un'origine quando si legge solo da un registro. È possibile specificare solo le proprietà Log name e MachineName (nome computer server) per l'istanza EventLog. In entrambi i casi, il membro Voci viene automaticamente popolato con l'elenco delle voci del registro eventi. È possibile selezionare l'indice appropriato per un elemento in questo elenco per leggere le singole voci. (1)

0

Non sono proprio sicuro di cosa stavate provando a stampare sulla console. Se è il messaggio in ciascuna voce del registro eventi che si sta tentando di stampare, all'interno del ciclo foreach si dovrebbe avere questo, invece:

Console.WriteLine(log.Message + "\n"); 
11

Prova questa:

EventLog log = new EventLog("Security"); 
var entries = log.Entries.Cast<EventLogEntry>() 
         .Where(x => x.InstanceId == 4624) 
         .Select(x => new 
         { 
          x.MachineName, 
          x.Site, 
          x.Source, 
          x.Message 
         }).ToList();