2010-12-16 22 views

Respuesta

3

Desde el sitio log4net: http://logging.apache.org/log4net/release/faq.html

Nº log4net no es fiable. Es un sistema de registro de mejor esfuerzo y detención de fallas.

Por fail-stop, nos referimos a que log4net no arrojará excepciones inesperadas en el tiempo de ejecución, lo que podría causar el bloqueo de la aplicación. Si por alguna razón, log4net arroja una excepción no detectada (a excepción de ArgumentException y ArgumentNullException que pueden arrojarse), envíe un correo electrónico a la lista de correo [email protected] Las excepciones no detectadas se manejan como errores graves que requieren atención inmediata.

Personalmente lo uso todo el tiempo y nunca he tenido un problema.

+0

Me preocupa que al menos ColorConsoleAppender cuelgue la aplicación. De hecho, me encuentro con uno – user496949

+0

@ user496949: me encontré con el mismo problema. Estaba usando un proceso invisible y anexado con ColoredConsoleAppender. –

+0

En realidad resolví el problema: el proceso de llamada no se leía desde la secuencia de salida y, finalmente, la transmisión estaba "completa". –

2

@ ralf.w. ya muestra los síntomas completos. Puedo reformularlo ya que recientemente también he tenido el mismo problema.

  1. Desarrolle una aplicación de consola que use ColorConsoleAppender (o ConsoleAppender) para imprimir registros.
  2. Desarrolle otra aplicación (WinForms en mi caso) para ejecutar esa consola (usando Process.Start). UseShellExecute = false para redirigir la salida estándar y el error. CreateNoWindow = true WindowStyle = Oculto.

Luego, en unas pocas máquinas (o sesiones de escritorio remotas), log4net bloqueará la aplicación de la consola, y en los volcados se puede ver que extrañamente espera una escritura en la secuencia para finalizar.

Difícil de reproducir en una máquina normal (como la mía), tan difícil de seguir investigando aunque log4net es de código abierto.

La solución alternativa puede ser tan simple como mostrar la aplicación de la consola como minimizada (en lugar de oculta), y/o cambiar otras configuraciones de ProcessStartInfo.

+1

Estábamos viendo algo similar. Determinamos que log4net (y/o Windows) está almacenando en buffer hasta 4 KB de salida a stdout/stderr. Después de que se llene ese búfer, las llamadas de registro adicionales se bloquearán. Entonces, si el Proceso A inicia el Proceso B y los registros del Proceso B en la consola, y el Proceso A no lee la salida estándar del proceso iniciado (Proceso B), el Proceso B se bloqueará después de que se llene. El cambio de redirección soluciona el problema. Tener el proceso A de lectura estándar también solucionaría el problema. – Jimothy

+0

@Jimothy me resolvió el problema de manera efectiva;) Thx. – nozzleman

Cuestiones relacionadas