textos texto programas programa para office mejor hacer gratis frases fotos falsificar escribir editar documentos crear app aplicaciones aplicacion log4net

texto - log4net, ¿pueden 2 aplicaciones escribir en el mismo archivo de registro?



programa para editar documentos gratis (5)

Depende del FileAppender de LockingModel . Si es ExclusiveLock , otro proceso no puede abrir el archivo para escribir. La alternativa es MinimalLock , pero no está diseñada para este propósito. Está destinado a permitir que otro proceso mueva o elimine el archivo.

¿Es posible tener 2 aplicaciones que escriban en el mismo archivo de registro usando log4net?


O puede usar Mutex para bloquear recursos comunes y, por lo tanto, para sincronizar el acceso a un archivo de registro común de diferentes procesos.


Pueden hacerlo, pero si una aplicación está escribiendo el archivo, la otra aplicación probablemente experimentará un error si necesita escribir también en el registro debido al hecho de que la primera aplicación mantendrá el archivo abierto para escritura. Siempre es mejor tener orígenes de registro dedicados para sus aplicaciones: si necesita compartir un registro, use una base de datos, ya que está diseñada para manejar escrituras simultáneas.

Esta es una de esas cosas que funcionarán realmente bien en su máquina cuando esté desarrollando, ya que no es probable que cree suficientes escrituras simultáneas en el archivo de registro para detectar cualquier problema. Una vez que la aplicación comience a experimentar más carga, el problema comenzará a mostrarse y en ese momento se manifestará de formas extrañas. Definitivamente intentaría otra solución.


Sí, es posible, como se indicó anteriormente, pero ahora he realizado algunas pruebas de estrés en este escenario.

La configuración es bastante simple:

  1. El proyecto web 1 se configuró con una página que registra una sola entrada + un botón que activa 1000 solicitudes en la misma página, con un contador en la URL (recogido por la declaración de registro).
  2. Proyecto web 2 configurado de forma idéntica, contra el mismo archivo de registro.

Cuando se hace clic en ambos botones al mismo tiempo, las entradas del registro se intercalan a lo largo del registro. PERO, y este es el gran GOTCHA, a juzgar por el contador de solicitud que lo acompaña, está claro que hay condiciones de carrera. Casi cada vez que un proyecto web logra registrar su entrada, el otro falla (se omite la entrada).

Por lo tanto, con un tráfico decente en contra de este registro común, básicamente no tendrá ninguna garantía de qué declaraciones de registro realmente terminarán en el registro. La conclusión es que siempre hay archivos de registro específicos del proyecto, parece.

La prueba se realizó con el valor predeterminado de "MinimalLock". También volví a hacer la prueba con "ExclusiveLock", solo para encontrar que el primer proyecto web para configurar el registrador "ganó", básicamente bloqueando TODAS las demás solicitudes para iniciar sesión. Así que obviamente, eso también es un no-go.


MinimalLock resuelve parcialmente el problema (como lo mencionó @Mark), pero si está usando RollingFileAppender, encontrará otros problemas. Cuando el archivo se enrolla, es posible que se encuentre en una condición de carrera en la que un proceso sobrescribe el archivo de registro recién creado de otro proceso.

Otras opciones incluyen RemoteLogger, donde tiene un servidor simple configurado para recibir y registrar eventos de registro enviados por otros procesos. Del mismo modo, puede iniciar sesión en una base de datos SQL. Escribí un simple anexo que se registra en Redis; necesitarías una aplicación simple para leer desde Redis y grabar en un archivo. El problema con estos enfoques es que todos introducen un punto de falla. Cuando algo no funciona bien, a menudo es cuando más se necesitan los registros y es posible que no estén disponibles.

Así que mi solución fue evitar el problema al tener cada registro de proceso en su propio archivo. Esto fue fácil de hacer con un cambio en la configuración. En su configuración de (Rolling)FileAppender , use:

<file type="log4net.Util.PatternString" value="c:/mylog-[%processid].txt" />

El ID de proceso se convierte en parte del nombre del archivo. Sí, esto significa que ahora tiene varios archivos de registro para peinar, pero un agregador de archivos de registro como Graylog, Splunk o Logscape puede ayudar.