Come rintracciare i problemi di log4net

Io uso log4net tutto il tempo, ma una cosa che non ho mai capito è come dire cosa sta succedendo all’interno. Ad esempio, ho un appender della console e un appender del database nel mio progetto. Ho apportato alcune modifiche al database e al codice e ora l’appender del database non funziona più. Capirò perché alla fine, ma sarebbe di grande aiuto se potessi vedere cosa succede all’interno di log4net.

Log4net genera qualsiasi tipo di output che posso visualizzare per cercare di determinare la fonte del mio problema?

Per prima cosa devi impostare questo valore sul file di configurazione dell’applicazione:

     

Quindi, per determinare il file in cui si desidera salvare l’output, è ansible aggiungere il seguente codice nello stesso file .config:

  ...        ...  

Puoi trovare una spiegazione più dettagliata in ‘Come abilitare il debugging interno di log4net?’ nella pagina delle FAQ di log4net .

Se si sta utilizzando un file di configurazione log4net, è ansible triggersre il debug anche modificando il nodo superiore in:

  

Questo funzionerà quando la configurazione verrà ricaricata e si suppone che l’ascoltatore di traccia sia configurato correttamente.

Oltre alla risposta di cui sopra, è ansible utilizzare questa riga per visualizzare il registro in tempo reale anziché l’output c: \ tmp \ log4net.txt.

 log4net.Util.LogLog.InternalDebugging = true; 

Ad esempio, in un’app console, è ansible aggiungere questo e quindi guardare l’output in tempo reale. È utile per eseguire il debug di log4net in una piccola unità di test per vedere cosa succede con l’appender che stai testando.

Assicurarsi che l’applicazione di root in cui il punto di ingresso è registra qualcosa su log4net. Dagli uno di questi:

 private static ILog logger = LogManager.GetLogger(typeof(Program)); static void Main(string[] args) { logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString()); 

Con 2.0.8, ho avuto una situazione interessante. Ho creato un progetto di biblioteca e un progetto di prova exe che dimostrerebbe le sue capacità. Il progetto della libreria è stato impostato per utilizzare Log4net come era il progetto exe. Il progetto exe utilizzava l’attributo assemblyinfo per registrare la configurazione, ma non ricevevo output di registrazione sulla console o sul file di registro. Quando ho triggersto la registrazione interna di debug di log4net, ho ricevuto alcuni messaggi interni scritti sulla console, ma ancora nessuno dei miei registri normali. Non sono stati segnalati errori. Tutto ha iniziato a funzionare quando ho aggiunto il codice sopra al mio programma. Log4net è stato altrimenti configurato correttamente.

Se il registro interno non ti fornisce abbastanza informazioni, è molto facile compilare ed eseguire il debug del codice sorgente . Se non vuoi confonderti con il tuo progetto di sviluppo, aggiungi una semplice applicazione console che registra solo un messaggio, copia il log4net.config del tuo progetto in questa applicazione e log4net.config il debug della class in questione.