c# - ¿Cuándo escribe log4net o confirma el registro en el archivo?
winforms (4)
Usamos log4net para registrar el evento y error de la aplicación winform. Nuestro cliente desea comprobar el archivo de registro durante la aplicación en ejecución. Pero no puedo descubrir cuándo y cómo log4net realiza la operación de escritura (confirmación). Y cómo cumplir con los requisitos del cliente, excepto crear otro registrador por mi cuenta. ¿Alguna ayuda? Gracias.
Habla de un archivo de registro, por lo que presumiblemente está usando FileAppender o una clase derivada. Esto amortiguará la salida por defecto. La salida en búfer es mucho más eficiente, por lo que para cumplir con sus requisitos, le sugiero que proporcione algún mecanismo para vaciar el registro antes de verlo, en lugar de forzar una confirmación después de cada operación de escritura.
Puedes hacer esto con un código como el siguiente:
foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
if (b != null) b.Flush();
}
Una cosa que noté cuando estaba usando log4net en una instancia de SharePoint es que, dependiendo de su configuración de seguridad y la implementación de su carga de configuración, el usuario que ejecuta el grupo de aplicaciones puede no tener derechos para escribir en el sistema de archivos local para crear el archivo de registro.
Debido a esto, debe asegurarse de que su configuración se invoque con las credenciales correctas, en SharePoint estaría en un contexto de seguridad elevado. No está totalmente relacionado, pero puede ser un problema que te encuentres.
vea this publicación SO para ver cómo programar un registro log4net. La respuesta de Joe, aunque ligeramente inexacta, es más o menos el mismo código, por lo que, presumiblemente, funcionaría para vaciar a todos los agregados almacenados.
Si está utilizando FileAppender
, este appender hereda el TextWriterAppender
, que a su vez expone la propiedad ImmediateFlush
. El valor de esta propiedad es true
de forma predeterminada y obliga al aplicador a hacer un Flush()
en la secuencia subyacente para cada operación de anexar.
Dependiendo de cómo visualice el cliente "monitoreando" el archivo de registro, una idea podría ser habilitar el monitoreo desde su aplicación. Esto se puede hacer además de adjuntar a un archivo, usando MemoryAppender y leyendo eventos de ese appender.