Buffering registra i messaggi in NLog e li svuota manualmente alla destinazione

Sto cercando di accedere tramite il comando Mail di NLog. Funziona bene, ma volevo avvolgere il mailtarget con BufferedTargetWrapper per BufferedTargetWrapper 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 nella mail bersaglio).

Se definisco un FlushTimeout o il BufferSize di BufferedTargetWrapper tutto funziona perfettamente come supposto. Ma se FlushTimeout e BufferSize non sono impostati, non riesco a farlo funzionare.

Come risposta a questa domanda su SO Force BufferingTargetWrapper per svuotare non ho niente del genere:

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

Ma la documentazione e questa risposta sono in contraddizione con la mia versione di NLog (2.0.0.2000). Non esiste un metodo flush senza parametri, solo il metodo flush per gli obiettivi asincroni.

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

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

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