J'essaie de lire les journaux des événements de mon application EventLoggingApp . Le problème est la lecture des journaux pour ma source unique (EventLoggingApp).
Ce code lisait les journaux pour chaque source. Quel est le problème? Aucun conseil?
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);
}
}
Essaye ça:
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();
Découvrez ce article sur MSDN. Vous ne pouvez pas lire les entrées du journal des événements par source. Seul le nom du journal est important. À la place, vous pouvez créer un journal des événements distinct pour votre application ou filtrer les entrées en vérifiant la propriété Source de chaque entrée dans la boucle foreach.
MSDN (1)(2) indique que la source sert uniquement à écrire les journaux des événements.
Il n'est pas nécessaire de spécifier une source lorsque vous ne lisez qu'un journal. Vous pouvez spécifier uniquement les propriétés Nom du journal et MachineName (nom de l'ordinateur du serveur) pour l'instance EventLog. Dans les deux cas, le membre Entries est automatiquement renseigné avec la liste des entrées du journal des événements. Vous pouvez sélectionner l'index approprié pour un élément de cette liste afin de lire des entrées individuelles. (1)
Je ne suis pas vraiment sûr de ce que vous essayez d'imprimer sur la console. Si c'est le message dans chaque entrée du journal des événements que vous essayez d'imprimer, vous devriez plutôt avoir ceci dans la boucle foreach
:
Console.WriteLine(log.Message + "\n");