2 votes

Définition des propriétés du journal des événements juste après la création de la source d'événements

J'ai du code qui crée une nouvelle source d'événement :

EventLog.CreateEventSource(Source, LogName);

Je sais qu'il y a un temps de latence pour créer ça. Je voudrais définir certaines propriétés par défaut du journal des événements. Je pense à quelque chose de l'ordre de :

EventLog log = new EventLog();
log.Source = Source;
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);

Y a-t-il un moyen créatif de faire cela en même temps ?

Je suppose que je pourrais vérifier périodiquement EventLog.Exists(...) jusqu'à ce qu'il renvoie vrai, mais il semble qu'il doit y avoir un moyen plus propre.

4voto

Schiavini Points 1392

Ce post est ancien, mais je suis venu ici en cherchant avec google, et j'ai pensé que cela pourrait être utile.

Si vous créez une source de journal d'événements (au lieu d'un nouveau journal d'événements), les paramètres que vous appliquez avec la commande ModifyOverflowPolicy sont en fait pour l'ensemble du journal des événements et non pour la source que vous venez de créer.

Vous devriez donc être en mesure de le faire :

string LogName = "Application";
EventLog.CreateEventSource(Source, LogName);

EventLog log = new EventLog(LogName);
log.MaximumKilobytes = 16384;
log.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0);

La propriété log.Source n'est utilisé que si vous avez l'intention d'écrire dans le journal : http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.source.aspx

Sinon, vous pouvez écrire un journal d'information (par exemple, le journal des événements créé) pour forcer la création du journal :

le journal n'est pas créé avant que la première entrée y soit écrite. http://msdn.microsoft.com/en-us/library/2awhba7a.aspx

1voto

Peter Lindgren Points 11

Je viens juste d'essayer et pour autant que je puisse dire, le ModifyOverflowPolicy() n'est pas nécessaire pour définir la taille maximale du fichier. De plus, la taille minimale semble être de 1 Mo même si l'appel accepte des valeurs inférieures. Toute valeur acceptée est stockée dans le registre (en octets) mais l'interface graphique et les tests montrent que 1028 kB est le minimum. Il est intéressant de noter que l'appel GetEventLogs() renvoie la taille dérivée du registre, et non la limite réelle de 1 Mo.

if (!System.Diagnostics.EventLog.SourceExists(this.eventSourceName))
{
    System.Diagnostics.EventLog.CreateEventSource(this.eventSourceName, this.eventLogName);
    if (!string.IsNullOrEmpty(this.eventLogMaxSizeKB))
    {
        System.Diagnostics.EventLog myEventLog = new System.Diagnostics.EventLog(this.eventLogName);
        long RoundedToLowest64k = (long.Parse(this.eventLogMaxSizeKB) / 64) * 64;
        myEventLog.MaximumKilobytes = RoundedToLowest64k;
    }
}

Testé sur Windows 7 64 bits et 2008 R2 64 bits. J'ai également remarqué que la taille réelle du fichier est supérieure de 4 ko à celle que vous avez définie. Dans l'interface graphique, cela est visible pour la taille minimale, 1028 kByte, mais toutes les valeurs plus grandes sont des multiples de 64 :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X