2008-11-14 11 views

Respuesta

53

Escriba localmente en el disco, luego inserte por lotes periódicamente en la base de datos (por ejemplo, en el tiempo de volcado del registro). Haz eso en un proceso separado y de baja prioridad. Más eficiente y más robusto ...

(Asegúrese de que la tabla de registro de base de datos contiene una columna para "máquina de la que el evento del registro vino de" por cierto - muy práctico)

+0

Me gusta esa idea mejor. Y, si necesitara los datos en la base de datos más rápido, podría hacerlo todas las noches, si sus rotaciones de registros no son todas las noches para comenzar. –

+10

¿No significaría eso que la información de registro en la base de datos siempre está desactualizada, y por lo tanto, serviría principalmente como un archivo en lugar de algo que usaría para diagnosticar problemas recientes? – MusiGenesis

+0

En términos de diagnóstico de los problemas actuales, se enfrentará a un desafío como ese, sin importar cómo maneje los registros actuales (tail/grep/etc o alternativas de Windows para no interferir con el registro). Incluso para un problema como ese, es posible que desee consultar los datos históricos para ver si sucedieron antes. –

8

Yo diría que no, dado que un porcentaje bastante grande de errores del servidor implica problemas de comunicación con las bases de datos. Si la base de datos estuviera en otra máquina, la conectividad de red sería otra fuente de errores que no podrían registrarse.

Si tuviera que registrar los errores del servidor en una base de datos, sería crítico tener un registrador de copia de seguridad que escribiera localmente (en un registro de eventos o archivo o algo) en caso de que no se pueda acceder a la base de datos.

+0

Ese es un buen punto. Claro, puedes verificar si todo está bien antes de iniciar sesión, pero ¿qué ocurre si algo sucede después del control? ¿O qué haces con los datos para iniciar sesión después del cheque? Dos cosas no tratadas en el artículo, al menos por lo que vi. –

1

Probablemente no es una mala idea si quieres los registros en una base de datos, pero yo diría que no sigas el consejo del artículo si tienes muchas entradas en el archivo de registro. El problema principal es que he visto que los sistemas de archivos tienen problemas para mantenerse al día con los registros provenientes de un sitio ocupado y mucho menos de una base de datos. Si realmente quiere hacer esto, me gustaría cargar los archivos de registro en la base de datos después de que se escriben por primera vez en el disco.

1

¿Piensa en una base de datos correctamente configurada que utiliza RAM para lecturas y escrituras? Esto es mucho más rápido que escribir en un disco y no presentaría el cuello de botella de IO que ve cuando atiende a un gran número de clientes que ocurre cuando los hilos comienzan a bloquearse debido a que el sistema operativo les pide que esperen ejecutando hilos que usan todos los IO disponibles. maneja.

No tengo ningún punto de referencia para probar esta información, aunque mi última aplicación está avanzando con el registro de la base de datos. Esto tendrá un failsafe como se menciona en una de estas respuestas. Si no se puede crear la conexión a la base de datos, cree una base de datos local (h2 ¿quizás?) Y escriba eso. Entonces podemos tener una verificación periódica de la conectividad de la base de datos que restablecerá la conexión, volcará la base de datos local y la enviará a la base de datos remota.

Esto podría hacerse fuera de horario si no tiene un sitio H-A.

En algún momento en el futuro espero desarrollar puntos de referencia para demostrar mi punto.

¡Buena suerte!

2

Acceder a DB si se puede y no ralentizar el DB :)

Es la forma más rápida manera de la manera de encontrar nada en el PP después en los archivos de registro. Especialmente si piensas más adelante lo que necesitarás. Inicio de sesión en db dejó usted tabla de registro de consulta como esta:

select * from logs 
where log_name = 'wcf' and log_level = 'error' 

a continuación, después usted encuentra error se puede ver todo el camino que conduce a este error

select * from logs 
where contextId = 'what you get from previous select' order by timestamp 

¿Cómo va a obtener esta información si inicia sesión en archivos de texto?

Editar: Como JonSkeet sugirió que esta respuesta sería mejor si he dicho que uno debe considerar la posibilidad de ingresar a db asíncrona. Así que lo digo :) Simplemente no lo necesitaba.Por ejemplo, cómo hacerlo, puede consultar "Ultra Fast ASP.NET" de Richard Kiessig.

1

Si la base de datos es de producción, esta es una idea horrible. Usted tendrá problemas con las copias de seguridad, la replicación, la recuperación. Me gusta más almacenamiento para DB, réplicas, si hay alguna, y copias de seguridad. Más tiempo para configurar y restaurar la replicación, más tiempo para verificar las copias de seguridad, más tiempo para recuperar la base de datos de las copias de seguridad.

Cuestiones relacionadas