2011-11-16 12 views
8

Sto tentando di accedere tramite il comando Mail di NLog. Funziona bene, ma volevo avvolgere il mailtarget con lo BufferedTargetWrapper per memorizzare i messaggi di log fino a un punto di codice predefinito, dove voglio svuotare manualmente il buffer e inviare i messaggi di registro buffer preceduti da una singola mail (come definito nel destinazione posta).Memorizzare i messaggi di registro in NLog e svuotarli manualmente sulla destinazione

Se si definisce uno FlushTimeout o lo BufferSize dello BufferedTargetWrapper, tutto funziona correttamente come supposto. Ma se FlushTimeout e BufferSize non sono impostati, non riesco a farlo funzionare.

Come risponde a questa domanda in su SO Force BufferingTargetWrapper to empty non ho qualcosa di simile:

LogManager.Configuration.AllTargets.Where(t => t != null && t is BufferingTargetWrapper).ToList(). 
      ForEach(b => ((BufferingTargetWrapper)b).Flush(null)); 

Ma la documentazione e questa risposta è in contraddizione con la mia NLog versione (2.0.0.2000). Non esiste un metodo flush senza parametri, solo il metodo flush per le destinazioni asincrone.

C'è un modo per forzare BufferingTargetWrapper a svuotare tutti i messaggi registrati sul target spostato (per inviarlo per posta)?

risposta

14

Secondo la documentazione il tuo approccio non dovrebbe funzionare, ma va bene. Basta dare al metodo flush un'espressione lambda vuota:

LogManager.Configuration.AllTargets 
    .OfType<BufferingTargetWrapper>() 
    .ToList() 
    .ForEach(b => b.Flush(e => 
     { 
      //do nothing here 
     })); 
+0

Funziona bene! Grazie! – dasheddot

+0

Funziona molto bene! –

Problemi correlati