2010-12-05 12 views
1

Recherche d'un remplacement pour la connexion à une application existante (presque ancienne). Cela enregistre les événements basés sur eventId et a une DLL configurée en tant que fichier de message d'événement (la consignation est effectuée dans le journal des événements et une file d'attente de messages). La journalisation complète dépend de l'identifiant de l'événement, car certains événements enregistrés sont téléchargés vers l'entreprise où ils sont internationalisés en fonction de l'ID de l'événement. Cette infrastructure de journalisation a également été enrichie d'une fonction de journalisation de fichiers qui n'utilise pas ce fichier de messages d'événements mais des chaînes de caractères simples enregistrées (en interne avec le support de survol et d'archivage). Je cherchais un framework de logging qui aura une interface standard pour la journalisation basée sur id (Error (id, object [] args)) et des messages "plain" (Error (string message, object [] args)).Connexion .net avec prise en charge d'eventid

Ni log4net ni nlog ne semblent avoir de telles interfaces.

Y a-t-il un cadre de diagraphie sur étagère à l'appui ou bien dois-je le construire moi-même? Ou adapter en quelque sorte log4net/nlog pour cela.

grâce, florin

Répondre

1

Voir cette link pour une log4net "extension" qui vous permet d'ajouter raisonnablement facilement ids d'événement pour enregistrer les messages.

Voici un extrait abrégé du lien log4net:

public interface IEventIDLog : ILog 
{ 
    void Info(int eventId, object message); 
    void Info(int eventId, object message, Exception t); 
} 

public class EventIDLogImpl : LogImpl, IEventIDLog 
{ 
    /// <summary> 
    /// The fully qualified name of this declaring type not the type of any subclass. 
    /// </summary> 

    private readonly static Type ThisDeclaringType = typeof(EventIDLogImpl); 

    public EventIDLogImpl(ILogger logger) : base(logger) 
    { 
    } 


    #region Implementation of IEventIDLog 
    public void Info(int eventId, object message) 
    { 
    Info(eventId, message, null); 
    } 


    public void Info(int eventId, object message, System.Exception t) 
    { 
    if (this.IsInfoEnabled) 
    { 
     LoggingEvent loggingEvent = new LoggingEvent(ThisDeclaringType, Logger.Repository, Logger.Name, Level.Info, message, t); 
     loggingEvent.Properties["EventID"] = eventId; 
     Logger.Log(loggingEvent); 
    } 
    } 
} 

Je ne vois aucune raison pour laquelle vous ne pouviez pas faire quelque chose de similaire avec NLog. Voici un link to some examples of extending the NLog Logger dans le référentiel source github de NLog.

Je noterai également que System.Diagnostics.TraceSource prend également en charge la journalisation EventId. Si vous considérez System.Diagnostics, vous pouvez également envisager d'utiliser Ukadc.Diagnostics pour obtenir une capacité de formatage similaire à ce que vous pouvez faire avec log4net et NLog.

1

Vous pouvez également intégrer la journalisation de l'application héritée à votre infrastructure de journalisation normale. Cela peut être facilement réalisé en utilisant le routing feature de .net Common.Logging qui est une abstraction des cadres de journalisation (il supporte enteprise lib, log4net, NLog, System.Trace).

0

Le TraceSource.TraceEvent-Methode offre la possibilité de transmettre un identifiant numérique pour un événement de journal et également des méthodes que vous pouvez utiliser pour consigner des messages «simples».

+0

Des informations supplémentaires sur l'ID de la méthode TraceEvent sont disponibles [ici] (http://stackoverflow.com/questions/17590453/what-should-i-identify-with-the-id-argument-in- traceource-traceevent-méthode) – Sonic78