.net - programas - ¿Qué tipo de registro es bueno para tu aplicación?
programacion android pdf 2018 (7)
Entonces, hemos discutido la posibilidad de iniciar sesión en mi lugar de trabajo y me preguntaba si algunos de ustedes podrían darme algunas ideas sobre sus enfoques.
Por lo general, nuestro escenario es, en realidad, no iniciar sesión, y principalmente aplicaciones .NET, winforms / WPF clientes que hablan a través de servicios web o directamente a un DB.
Entonces, la verdadera pregunta es, ¿dónde o qué registrarías? Por el momento, tenemos usuarios que informan mensajes de error, así que supongo que inicie / cierre log, excepciones ...
¿Lo lleva a las llamadas a los servicios web o db? Carga de página
¿Cómo se hace una buena idea de lo que el usuario estaba tratando de hacer en ese momento?
¿Es mejor ir hasta el final y registrar todo en múltiples 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 más idea de lo que es la práctica real en las tiendas más grandes.
¿Es mejor ir hasta el final y registrar todo en múltiples intentos / días, o registrar solo lo que necesita (dado que el disco duro es barato).
El hecho de que los discos duros son baratos realmente no es una buena razón para registrar todo lo posible, por algunas razones ... Por un lado, con una aplicación muy ocupada, realmente no desea ralentizar y atar escritura de escritura de discos registros (discos duros son bastante lentos). El segundo punto, y el más importante, hay muy poco que ganar con los terabytes que valen la pena. Para el desarrollo, pueden ser útiles, pero no es necesario que te quedes más de unos pocos minutos.
Algunos registros son, por supuesto, ú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 indicador de línea de comando), luego puede advertirse () 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 comprueba si --verbose está establecido e imprime el mensaje ... De esa forma puedo eliminar la depuración ("algún valor:% s "% (avar)) cuando sea necesario, y no tenga que preocuparse por volver atrás y eliminar las declaraciones de depuración print () en cualquier parte.
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 idiota 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 en general, para aplicaciones grandes, utiliza varios niveles de registros que se pueden activar cuando sea necesario. Para cosas más pequeñas, un indicador --verbose o equivalente, para aplicaciones web, registra errores y (hasta cierto punto) registra hits.
Básicamente, en "producción" registre solo la información que puede usar, en el registro de desarrollo, todo lo que pueda necesitar para solucionar problemas.
Como administrador, realmente aprecio las aplicaciones que se registran en el Registro de eventos (preferiblemente el propio, de lo contrario el registro de la aplicación) para todos los registros, pero los registros de seguimiento. Al iniciar sesión en el registro de eventos, es mucho más probable que el personal administrativo encuentre y atienda las advertencias o los errores antes de que se conviertan en un problema importante (si es un problema que pueden resolver) o les permite ponerse en contacto. con los desarrolladores, que pueden usar los registros de seguimiento para seguir solucionando el problema.
Mi mayor problema al soportar una aplicación .NET personalizada ahora mismo es que hay 8 aplicaciones diferentes (algunas aplicaciones de consola, algunas formas de pago y algunas web) del mismo proveedor. Ninguno de ellos se registra en el registro de eventos, todos tienen sus propios archivos de registro personalizados. Pero para todas las formas de pago y las aplicaciones de la consola, mantienen el archivo abierto mientras se ejecutan, por lo que no puedo supervisarlo en busca de problemas. Además, los registros están escritos de forma ligeramente diferente, por lo que tendría que analizarlos de forma diferente para obtener información útil.
Esto me obliga a monitorear la apariencia de una aplicación (¿está respondiendo en los puertos en los que está activo, el conjunto de trabajo del proceso es demasiado alto, etc.), en lugar de cuál es realmente el estado de la aplicación?
Considere a las personas que mantienen su aplicación después de implementarla y proporcione el registro que pueden usar. ¡Gracias!
La clave para iniciar sesión es una buena planificación. Sugiero que busque en la biblioteca de la empresa la excepción y el bloque de aplicación de registro ( 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 4 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 = acceso a un recurso externo como un servicio web, db 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).
Usando el bloque de aplicaciones, entonces es bastante fácil ajustar qué nivel de prioridad quieres registrar. Entonces, en desarrollo registraría todo, pero a medida que obtenga un sistema estable en producción, probablemente solo le interesarían las excepciones no controladas y posiblemente las excepciones manejadas.
Actualización : 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 donde puede ser difícil relacionar un error en el cliente con los servidores de aplicaciones. Principalmente porque cualquier error a través de los servicios web queda envuelto como una excepción SOAP. No puedo recordarlo, pero creo que si usa un manejador de excepciones personalizado (que es parte de la biblioteca de la empresa) puede agregar datos a excepciones como la ID de instancia de manejo de la excepción del servidor de la aplicación. Esto hace que sea más fácil vincular las excepciones en un cliente a su cuadro de aplicación utilizando LogParser ( http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en ) .
Segunda actualización : también me gusta dar a cada evento diferente una identificación de evento separada y rastrear eso en un archivo de texto u hoja de cálculo bajo control de fuente. Sí, es un problema, pero si tienes la suerte de contar con un equipo de TI que cuide tus sistemas en producción, creo que tienden a esperar que los diferentes eventos tengan identificadores de eventos diferentes.
Para una aplicación de escritorio típica, almacenaba todo en la sesión actual, y tal vez almacenaba mensajes de información para las últimas n sesiones o hasta x en tamaño.
Supongo que tus mensajes están organizados. Usamos 4 categorías; errores, advertencias, información y rastreo. Todavía estamos averiguando qué va en qué nivel. Como me estoy acostumbrando a analizar archivos de registro, generalmente digo "registrar más". No te preocupes por la legibilidad, probablemente tengas que procesar el archivo de registro un poco antes de que puedas usarlo.
Al final, encuentre un buen marco de registro que le permita controlar el uso de su spool en el tiempo de vida y espacio de almacenamiento, y una API adecuada que minimice el efecto en su código. Lo ideal es que simplemente escriba info("waaah")
o warning("waah")
y la API hace todo el etiquetado elegante para usted.
Esta publicación en highscalability.com proporciona una buena perspectiva para iniciar sesión en un sistema distribuido a gran escala. (Y casualmente, comienza mencionando una publicación en JoelOnSoftware).
Gracias chicos, mucha información buena, 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 caerán.
Como respuesta rápida, diría que se deben crear una serie de categorías y niveles de registro intercambiables, por ejemplo, información, advertencia, error, crítica, etc.
Luego, facilite establecer el nivel de registro para ajustar el nivel de detalle que necesita. Por lo general, configure el nivel de registro en un archivo de configuración y detenga y reinicie la aplicación.
También publicaría a los desarrolladores cuál es el significado para 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.