Pregunta

Así que hemos hablado de iniciar sesión de pasada en mi lugar de trabajo y me preguntaba si algunos de ustedes aquí presentes podrían darme algunas ideas sobre sus enfoques.

Por lo general, nuestro escenario es que no hay ningún registro en absoluto, y principalmente aplicaciones .NET, clientes winforms/WPF que hablan a través de servicios web o directamente a una base de datos.

Entonces, la verdadera pregunta es: ¿dónde o qué registrarías?En este momento tenemos usuarios que informan mensajes de error, por lo que asumiría inicios/apagados de registros, excepciones...

¿Lo llevas a llamadas a los servicios web o db?¿Se carga la página?

¿Cómo se puede tener una buena idea de lo que el usuario intentaba hacer en ese momento?

¿Es mejor ir hasta el final y registrar todo en varios intentos/días, o registrar solo lo que necesita (dado que el disco duro es barato)?

Supongo que son algunas preguntas, pero quería tener una idea más clara de cuál es la práctica real en las tiendas más grandes.

¿Fue útil?

Solución

La clave para la tala es una buena planificación.Le sugiero que consulte el bloque de aplicación de registro y excepción de la biblioteca empresarial (http://msdn.microsoft.com/en-us/library/cc467894.aspx).Hay una pequeña curva de aprendizaje, pero funciona bastante bien.El enfoque que prefiero en este momento es definir cuatro niveles de prioridad.4=Excepción no controlada (error en el registro de eventos), 3=Excepción manejada (advertencia en el registro de eventos), 2=Acceder a un recurso externo como un servicio web, base de datos o sistema mainframe (información en el registro de eventos), 1=Detallado/cualquier otra cosa de interés (información en el registro de eventos).

Al utilizar el bloque de aplicaciones, es bastante fácil modificar el nivel de prioridad que desea registrar.Entonces, en el desarrollo, registrarías todo, pero a medida que obtengas un sistema estable en producción, probablemente solo te interesarán las excepciones no controladas y posiblemente las excepciones controladas.

Actualizar:Para mayor claridad, le sugiero que inicie sesión tanto en su aplicación winform/wpf como en sus servicios web.En un escenario web, he tenido problemas en el pasado en los que puede ser difícil vincular un error en el cliente a los servidores de la aplicación.Principalmente porque cualquier error a través de los servicios web se incluye como una excepción SOAP.No puedo recordarlo, pero creo que si usa un controlador de excepciones personalizado (que es parte de la biblioteca empresarial), puede agregar datos a las excepciones, como la identificación de la instancia de manejo de la excepción del servidor de aplicaciones.Esto hace que sea más fácil vincular las excepciones de un cliente al cuadro de su aplicación mediante el uso de LogParser (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en).

Segunda actualización:También me gusta darle a cada evento diferente una identificación de evento separada y rastrearla en un archivo de texto u hoja de cálculo bajo control de fuente.Sí, es una molestia, pero si tienes la suerte de tener un equipo de TI cuidando tus sistemas en producción, creo que tienden a esperar que diferentes eventos tengan diferentes identificadores de evento.

Otros consejos

Como administrador, realmente aprecio las aplicaciones que se registran en el registro de eventos (preferiblemente el suyo propio, de lo contrario, el registro de la aplicación) para todos los registros, excepto los registros de seguimiento.Al iniciar sesión en el registro de eventos, es mucho más probable que el personal administrativo pueda encontrar y abordar las advertencias o errores antes de que se conviertan en un problema importante (si es un problema que pueden abordar), o les permite ponerse en contacto. con los desarrolladores, quienes pueden usar los registros de seguimiento para solucionar aún más el problema.

Mi mayor problema al admitir una aplicación .NET personalizada en este momento es que hay 8 aplicaciones diferentes (algunas aplicaciones de consola, algunas winforms y algunas web) del mismo proveedor.Ninguno de ellos ingresa al registro de eventos, todos tienen sus propios archivos de registro personalizados.Pero para todos los winforms y aplicaciones de consola, mantienen el archivo abierto mientras se ejecutan, por lo que no puedo monitorearlo en busca de problemas.Además, todos los registros están escritos de manera ligeramente diferente, por lo que tendría que analizarlos de manera un poco diferente para obtener información útil.

Esto me obliga a monitorear la apariencia de una aplicación (si responde en los puertos en los que está activa, si el proceso de trabajo está aumentando demasiado, etc.), en lugar de cuál es realmente el estado de la aplicación.

Por favor, considere a las personas que mantienen su aplicación después de implementarla y proporcione registros que puedan usar.¡Gracias!

Esta publicación en highscalability.com proporciona una buena perspectiva sobre el registro en un sistema distribuido a gran escala.(Y casualmente comienza mencionando una publicación en JoelOnSoftware).

¿Es mejor ir hasta el final y registrar todo en varios intentos/días, o registrar solo lo que necesita (dado que el disco duro es barato)?

El hecho de que los discos duros sean baratos realmente no es una buena razón para registrar detalladamente todo lo posible, por varias razones...Por un lado, con una aplicación muy ocupada, realmente no desea ralentizarla y ocupar registros de escritura en disco (los discos duros son bastante lentos).El segundo punto, y el más importante: realmente hay muy poco que ganar con terabytes de registros.Para el desarrollo, pueden ser útiles, pero no es necesario conservarlos más de unos pocos minutos.

Por supuesto, algunos registros son útiles, tener diferentes niveles es la única forma de hacerlo; por ejemplo, debug() info() solo se registra si se solicita (en una configuración o en un indicador de línea de comando), entonces tal vez advertencia() y error() se envía a un archivo de registro

Para la mayoría de las cosas que he escrito (scripts pequeños), generalmente solo tengo una función debug(), que verifica si --verbose está configurado e imprime el mensaje.De esa manera puedo enviar debug("algún valor:%s" % (avar)) cuando sea necesario, y no tener que preocuparse por regresar y eliminar las declaraciones print() de depuración en todas partes.

Para aplicaciones web, generalmente solo uso los registros del servidor web para estadísticas y el registro de errores.Utilizo cosas como el registro de mod_rewrite cuando es necesario, pero sería una idiotez dejar esto habilitado más allá del desarrollo (ya que crea muchas líneas en cada solicitud de página)

Supongo que depende de la aplicación en sí, pero generalmente, para aplicaciones grandes, se utilizan múltiples niveles de registros que se pueden activar cuando sea necesario.Para cosas más pequeñas, un indicador --verbose o equivalente, para aplicaciones web, registrar errores y (hasta cierto punto) registrar aciertos.

Básicamente, en el registro de "producción" solo se registra la información que puede utilizar, en el registro de desarrollo todo lo que pueda necesitar para solucionar los problemas.

Para una aplicación de escritorio típica, almacenaría todo en la sesión actual y tal vez almacenaría mensajes de información de las últimas n sesiones o de hasta x tamaño.

Supongo que tus mensajes están organizados.Usamos 4 categorías;errores, advertencias, información y seguimiento.Todavía estamos averiguando qué sucede en cada nivel.A medida que me acostumbro a analizar archivos de registro, generalmente digo "registrar más".No se preocupe por la legibilidad, probablemente tendrá que procesar un poco el archivo de registro antes de poder usarlo.

Al final, encuentre un buen marco de registro que le permita controlar el uso de su spool en términos de vida útil y espacio de almacenamiento, y una API adecuada que minimice el efecto en su código.Lo ideal es que simplemente escribas info("waaah") o warning("waah") y la API hace todo el etiquetado sofisticado por usted.

Como respuesta rápida, diría que se creen una serie de categorías y niveles de registro intercambiables, p.información, advertencia, error, crítico, etc.

Luego, facilite la configuración del nivel de registro para ajustar el nivel de detalle que necesita.Normalmente, establezca el nivel de registro en un archivo de configuración y detenga y reinicie la aplicación.

También daría a conocer a los desarrolladores cuál es el significado de cada uno de los niveles.

editar:También configuraría un sistema para rotar, comprimir y archivar archivos de registro de forma regular, tal vez todas las noches.

Gracias a todos, mucha buena información, pero Martin me ha dado un poco más de detalles sobre cómo proceder.Le daré la respuesta, ya que parece que ahora que estamos fuera de las primeras páginas, las respuestas desaparecerán.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top