Attualmente utilizzo log4net con RollingFileAppender.C# log4net memorizza le voci in memoria ed Email in determinate condizioni
Ogni volta che si effettua una chiamata di registro, mi piacerebbe effettuare l'archiviazione nella memoria nella memoria. Alla fine dell'esecuzione della mia console mi piacerebbe (se un'impostazione di app.config è vera) prendere solo Warns and Fatals e inviare tutti questi messaggi in un'e-mail. Noto MemoryAppender ma non sono sicuro di come utilizzarlo. Vedi anche SMTPAppender ma non si è sicuri che sia lo strumento giusto, altrimenti userò MemoryAppender e in qualche modo escluderò solo gli eventi di Levels Warn/Fatal e poi invierò l'email usando la classe SmtpClient.
Come raggiungere questo obiettivo?
Grazie
Aggiornamento
mia ultima parte di log4net config ora assomiglia.
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender" >
<onlyFixPartialEventData value="true" />
<threshold value="WARN" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
<appender-ref ref="MemoryAppender" />
</root>
Nel codice che faccio:
private static MemoryAppender MemoryAppender
{
get
{
if (memoryAppender == null)
{
Hierarchy h = LogManager.GetRepository() as Hierarchy;
memoryAppender = h.Root.GetAppender("MemoryAppender") as MemoryAppender;
}
return memoryAppender;
}
}
Poi quando voglio i fatti mi chiamano:
MemoryAppender.GetEvents();
Ho provato MemoryAppender.GetEvents() [0] .RenderedMessage ma non è l'output corretto, come ottengo la stringa di messaggio come è stata scritta nei registri File/Console con lo schema e il tempo corretti ecc. e mi costruisco uno StringBuilder? Inserirò quindi questo nel corpo della mia email e lo invierò utilizzando SmtpClient. RenderMessage mi sta solo fornendo la stringa fornita alla chiamata Log.Warn(), non ciò che è stato scritto nel registro. Ciò è dovuto al fatto di non impostare un modello di layout su MemoryAppender?
Grazie
Ciao Peter grazie per il tuo aiuto, mi dispiace per il ritardo. Puoi dare un'occhiata al mio aggiornamento alla domanda sopra, qualche idea? molto apprezzato. – m3ntat
Inoltre avevi ragione, voglio catturare WARN, ERROR e FATAL in memoria. – m3ntat
@ m3ntat - guarda la mia risposta aggiornata. Spero possa aiutare. –