2010-04-12 21 views
5

Estoy desarrollando una aplicación web que debe admitir muchas solicitudes simultáneas, y me gustaría mantenerla lo suficientemente rápido. Ahora tengo que implementar una estrategia de registro, voy a usar log4net, pero ... ¿qué y cómo debo iniciar sesión? Quiero decir:Estrategia de registro vs. rendimiento

  1. ¿Cómo afecta el registro al rendimiento? ¿es posible/recomendable el registro utilizando llamadas asíncronas?
  2. ¿Es mejor utilizar un archivo de texto o una base de datos? ¿Es posible hacerlo condicional? por ejemplo, el registro predeterminado en la base de datos, y si falla, el cambio a un archivo de texto.
  3. ¿Qué hay de multihilo? ¿Debería importarme la sincronización cuando uso log4net? o es un hilo seguro fuera de la caja?

En los requisitos aparece que la aplicación debe almacenar en caché un par de cosas por solicitud, y me temo el impacto en el rendimiento de eso.

Saludos.

Respuesta

13
  1. Hace que la cosa sea más lenta: hacer algo lleva más tiempo que no hacer nada. Por lo general, en una cantidad insignificante. No te preocupes por eso
  2. Inicie sesión en un archivo de texto imo. Son fáciles de mover/grep/compress/mail, etc. y no tiene que preocuparse por iniciar sesión en una base de datos, ya que la base de datos está inactiva. Sin embargo, hay appenders para iniciar sesión en una base de datos para log4net.
  3. Yes, log4net es seguro para subprocesos.

Tener logging/tracing es extremadamente valioso - por lo menos debe registrar errores, o nunca los sabrá. La mayoría de las aplicaciones de registro le permiten activar y desactivar el nivel de detalle que necesita registrar.

No se preocupe por el rendimiento hasta que se convierta en un problema. No es como si estuvieras construyendo cohetes lunares y quiere ver cuánto peso puede soportar probándolo; es solo código, elimina las declaraciones de registro que inundan tus registros y vuelve a compilar si alguna vez se convierte en un problema.

4

Diría que está preocupado por el rendimiento al principio de la pieza, use log4net de una forma que es muy fácil de desactivar más adelante o personalizar (por ejemplo: uso de archivo conf que define el nivel de registro NONE, ERROR, WARN , DEBUG, INFO, ALL, VERBOSE etc ...),

Sin embargo, sus otras dos inquietudes son válidas, para la pregunta 2, iría por el archivo simple, ya que se puede leer fácilmente y se accede en lugar de la base de datos. Además, la ejecución de la escritura al final de un archivo es mejor que un db.

Y sí, como nos ha dicho log4net es seguro para la rosca.

Una pieza de consejo general, si su proyecto es grande y desea tener alguna esperanza de tener niveles de registro configurables como describí anteriormente, entonces realmente necesita acordar un estándar de codificación dentro de su equipo sobre qué iniciar sesión en diferentes niveles.

3

Estoy totalmente de acuerdo con lo que hhafez y nos dijeron. Está yendo por el camino correcto con un paquete de registro en lugar de intentar hacer el suyo. Es mucho más limpio y fácil de hacer las cosas bien. Iniciar sesión en un archivo de texto es mucho más fácil de gestionar a largo plazo (conjuntos de habilidades de proyectos típicos) que el registro de DB, aunque si está planeando cualquier análisis complejo de datos informados, a veces es más fácil tenerlo ya en un DB.

Si la eliminación de fallas es uno de sus objetivos establecidos para implementar una solución de registro, es imperativo que estandarice todos sus niveles de registro por adelantado y realice esa parte del proceso de revisión del código. Tenga suficientes diferencias en las granularidades para que pueda aumentar gradualmente la profundidad de los informes yendo al siguiente nivel. Es muy frustrante solucionar un problema PROD, no tener suficiente información de registro para ver el problema, luego aumentar al siguiente nivel de registro e inundar completamente los registros con tanto escupir que no se puede ver el bosque por los árboles (y tus registros ruedan cada 5 minutos debido al volumen). Lo he visto suceder

En la mayoría de los casos de registro de archivos de texto, el rendimiento no debería ser un problema. Es un poco más complicado con el registro de DB. Hacer una inserción es solo un poco más intensivo que agregarlo a un archivo de texto, pero es el volumen por unidad de tiempo lo que lo hace mucho más feo a escala.

Además, si va a hacer un análisis de registro sin conexión, debe elegir un formato de archivo de registro que sea fácilmente extensible y no requiera grandes cambios en el código de análisis si necesita agregar algo al registro. Manténgase alejado de las estructuras de mensajes anidados y de varias partes. Analizar ésto llega a ser un dolor.

¡Buena suerte con eso!