2010-02-02 17 views

Respuesta

18

Pagar el BufferingForwardingAppender. Usamos esto que avanza a RollingFileAppender. Encabeza las escrituras y permite que el código continúe sin esperar la escritura. Configuramos un Evaluador para forzar un enjuague en el umbral de WARN y configuramos lossy en falso para no perder ningún mensaje.

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> 
    <bufferSize value="512" /> 
    <lossy value="false" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="WARN"/> 
    </evaluator> 
    <appender-ref ref="RollingFileAppender" /> 
</appender> 
+0

Muy buena idea. No lo he intentado todavía pero lo haré alguna vez. –

+2

Exactamente lo que no sabía que estaba buscando. – ctrlplusb

+0

He probado esto en un proyecto web simple y (sorprendentemente) la escalabilidad no mejora, es bastante peor en su lugar. ** Prueba **: 500 solicitudes/50 usuarios para 20 líneas de registro por solicitud. ** Resultados **: Sin registro: 278 req/s, Aplicador de archivos rodantes: 129 req/s, Reenvío de búfer con archivo continuo: 76 req/s. – tozevv

5

Se podría escribir un Log4net equivalente de NullAppender, lo que sería muy rápido ... (Vaya - Al principio pensé que la pregunta era acerca de log4j; el mismo consejo se aplica sin embargo.)

Por supuesto, que wouldn' Hago algo útil, lo que me lleva a preguntarme por qué le da tanta importancia a la velocidad. El enfoque normal es calcular lo que necesita, luego compararlo/evaluarlo para verificar si funciona adecuadamente. Sospecho que estarás inundado con más datos de los que puedes procesar de manera útil antes de que se convierta en un cuello de botella. ¿Tiene un problema de rendimiento conocido con el registro?

+0

No es el problema de rendimiento no con el registro, pero en general estoy buscando mejorar el rendimiento de una aplicación y he agregado log4Net para perfilarlo en el tiempo de ejecución. No quiero que esto sea excesivo ya que la aplicación ya es lenta. Así que estoy buscando el appender que es el más rápido. – Amitabh

+1

@Amitabh: si la aplicación ya es lenta, eso significa que es incluso * menos * probable que el registro tenga un impacto significativo. Realmente, use lo que sea que logre registros con mayor facilidad, y luego simplemente use el registro de manera sensata. Es probable que sea la forma más rápida de mejorar la velocidad general de su aplicación. –

+0

Agregaré que a veces el problema no es lo lento que es el registro, sino cuán invasivo. Por ejemplo, si está iniciando sesión desde múltiples hilos, el solo hecho de iniciar sesión puede hacer que se sincronicen, lo que arroja lo que desea medir. La respuesta habitual es iniciar sesión en una cola, que se procesa en un único hilo. –

0

debe tener en cuenta

  1. escrito al archivo es mucho más rápido que escribir a la consola
  2. supongo que su problema es con la pre-producción (ceating los datos de registro y luego no usarlo) use log.canLog para asegurarse de que puede iniciar sesión antes de crear sus datos (este suele ser el gran consumidor)
  3. compruebe que no está utilizando todo tipo de campos que consumen tiempo como las credenciales actuales del usuario, etc.
Cuestiones relacionadas