Actualmente uso log4net con RollingFileAppender.C# entradas de la tienda log4net en la memoria y el correo electrónico bajo ciertas condiciones
Como cada llamada de registro se realiza Me gustaría almacenar esto en la memoria. Al final de la ejecución de mi aplicación de consola, me gustaría (si una configuración de app.config es verdadera) tomar solo las advertencias y las fatalidades y enviar todos estos mensajes en un correo electrónico. Noté MemoryAppender pero no estoy muy seguro de cómo usarlo. También vea SMTPAppender pero no estoy seguro de que sea la herramienta correcta, de lo contrario usaré MemoryAppender y de alguna manera filtraré solo eventos de Levels Warn/Fatal y luego enviaré correos electrónicos usando la clase SmtpClient.
¿Cómo lograr esto?
Gracias
Actualizar
Mi última parte de la configuración de log4net ahora se parece.
<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>
En el código que hago:
private static MemoryAppender MemoryAppender
{
get
{
if (memoryAppender == null)
{
Hierarchy h = LogManager.GetRepository() as Hierarchy;
memoryAppender = h.Root.GetAppender("MemoryAppender") as MemoryAppender;
}
return memoryAppender;
}
}
Entonces cuando quiero los eventos a los que llaman:
MemoryAppender.GetEvents();
He intentado MemoryAppender.GetEvents() [0] .RenderedMessage pero esa no es la salida correcta, cómo obtengo la cadena del mensaje tal como se escribió en los registros de File/Console con el patrón y el tiempo correctos etc y construirme un StringBuilder? Luego pondré esto en el cuerpo de mi correo electrónico y lo enviaré utilizando el SmtpClient. RenderMessage me está dando la cadena que se proporcionó a la llamada Log.Warn() no lo que se escribió en el registro. ¿Esto se debe a que no se establece un patrón de diseño en MemoryAppender?
Gracias
Hola Peter, gracias por tu ayuda, perdón por la demora. ¿Puedes echar un vistazo a mi actualización de la pregunta anterior, alguna idea? muy apreciado. – m3ntat
También tenía razón. Quiero capturar WARN, ERROR y FATAL en la memoria. – m3ntat
@ m3ntat - ver mi respuesta actualizada. Espero que ayude. –