Código para el registro de relación?

¿Cuál es el ideal de código para el registro de relación? No estoy acostumbrado a escribir los registros como la mayoría de las aplicaciones que he desarrollado no han tenido mucho registro.

Aunque recientemente he cambiado de trabajo y me he dado cuenta de que usted no puede ver el código de la aplicación para las llamadas a log4net. Agradezco que esto es útil, pero sin duda tener demasiadas declaraciones de depuración es tan malo como no tener ninguna en absoluto?

Hay registro de declaraciones que indican cuando cada método empieza y termina y lo están volviendo. y cuando casi todo está hecho.

No sería más fácil tener algún addon que utiliza la reflexión para agregar el registro de las declaraciones en tiempo de compilación para que no se interponga en el camino como que estaba tratando de mirar el código?

También en estos días de poderosos IDEs y la depuración remota es que tanto el registro realmente nescisary?

  • El registro es útil, pero el registro de todo lo que es, yo creo, unnescisary.
InformationsquelleAutor Omar Kooheji | 2008-09-30

14 Kommentare

  1. 13

    De hecho, hay una buena biblioteca para añadir en el registro, después del hecho, como usted dice, PostSharp. Se le permite hacerlo a través de atributo de programación basado, entre muchas otras cosas útiles más allá de registro.

    Estoy de acuerdo en que lo que dices es un poco excesivo para el registro.

    Algunos otros plantear algunos puntos buenos, especialmente el de la banca de la situación y de otras aplicaciones de misión crítica. Puede ser necesario que los extremos de registro, o al menos ser capaz de encender y apagar si es necesario, o tener varios niveles.

    • Eso suena muy parecido a lo que busco. Voy a discutir esto con mi jefe.
    • Usted no quiere que gran parte de la tala. Es contraproducente.
  2. 41

    Desde log4net hace un gran trabajo en el que no se tape los recursos, que tienden a ser un poco más detalladas sobre el registro, ya que cuando se tiene que cambiar al modo de depuración, de la información más tengas, mejor. Esto es lo que normalmente registro:

    Nivel de DEPURACIÓN

    • Los parámetros pasados en la
      método
    • Cualquier número de filas de conjuntos de resultados puedo recuperar
    • Cualquier datarows que puede contener datos sospechosos cuando se transmiten a través del método de
    • Cualquier «generado» rutas de archivos, cadenas de conexión, o de otros valores que podrían obtener mungled cuando ser «reconstruido» por el medio ambiente.

    Nivel de INFORMACIÓN

    • El inicio y el final del método
    • El inicio y el final de las grandes bucles
    • El inicio de cualquier caso/interruptor de declaraciones

    Nivel de ERROR

    • Excepciones controladas
    • No válido intentos de inicio de sesión (si la seguridad es un problema)
    • Los malos datos que me han interceptado forreporting

    FATAL Nivel

    • Las excepciones no controladas.

    También tiene un montón de detalles de registro me impide pedir al usuario de lo que estaban haciendo cuando recibieron el mensaje de error. Tengo facilidad a la pieza juntos.

    • Estoy contento con cómo log4net obras, sin embargo, cuando un método que debería haber sido uno de la línea es de 10, porque de todo el registro, que es en lo que creo que es un poco excesivo.
    • Poner todos los que se detalle en como una cuestión de curso es probablemente excesivo. Agregando que en mientras investiga un informe de error, entonces no eliminarlo (o más bien, bajando el nivel de registro para el módulo) es razonable, creo yo.
    • Jeff Atwood escribió en su blog acerca de esta respuesta: codinghorror.com/blog/archives/001192.html
    • Por favor, tenga piedad por el personal de mantenimiento del software. Sólo los registros de excepciones con una pila de llamadas completa y, a continuación, usted no tiene que tener todas esas informaciones.
    • ooh! Tema candente hoy en día. Quiero señalar que hay un seguimiento a este que creo que cubre algunas bases adicionales: stackoverflow.com/questions/231903/…
    • Estoy con JoeBloggs, pasar los tejidos! Incluso si tuviera que agregar algunos de estos para depurar un problema, nunca consideraría cualquiera de estos mensajes de INFORMACIÓN como cualquier otra cosa que DEPURAR, y que no iba a sobrevivir, la depuración de esfuerzo.
    • Tengo tanta dificultad tratando de depurar oscuro problemas con 1 megabyte la pena de registros, creo que la respuesta anterior, sólo agravará el problema. Parece que se va a producir de 10 MB por minuto. Eso es más un problema que una solución.
    • Jeff Atwood escribe y mantiene el código principalmente para los sistemas donde se tiene el 100% de acceso a la producción. Esta es una situación muy distinta de los lugares donde el solo fuente para depurar un problema de producción será registros. Si usted vende a los hospitales, los bancos, o el Gobierno, no se te permitirá tener volcados porque pueden contener información personal, mientras que los registros pueden ser lavadas. Como para que la gente quejarse de demasiada información, aprender a usar un analizador de registro, no se utiliza el bloc de notas para ver un gran (grande es el PB, no MB por cierto) del archivo de registro.
    • Nadie downvoting esta respuesta más probable es que nunca había depurar y corregir una no reproducibles problema donde todo lo que usted tiene es el archivo de registro.
    • ¿Has probado Serilog marco ?
    • Creo que deberías releer tanto a esta pregunta y a la entrada del blog que usted se está refiriendo a conseguir el contexto apropiado. Me imagino que Jeff estaba en una situación excelente para reproducir cualquier tipo de problema y por lo tanto mi comentario no se aplica a él. También me imagino que no has probado de hacer el ejercicio de ti mismo.

  3. 14

    Completa de los archivos de registro son increíblemente útiles. Considere una situación en la que la aplicación se implementa en algún lugar como un banco. Usted no puede ir allí y depurar a mano y seguro que no va a enviar sus datos. Lo que se puede obtener es un completo registro que pueden apuntar a donde el problema ocurrido. Tener un número de registro de niveles es muy útil. Normalmente, la aplicación se ejecute en un modo tal que sólo los informes sobre errores fatales o graves errores. Cuando usted necesita para depurar un usuario puede cambiar en el seguimiento de depuración o de salida y obtener mucha más información.

    El tipo de registro que estamos viendo parece excesivo, pero realmente no puedo decir que es cierto sin saber más acerca de la aplicación y donde se podría implementar.

    • De todos modos, usted no será capaz de depurar mirando en el registro.
  4. 14

    También en estos días de poderosos IDEs y la depuración remota es que tanto el registro realmente nescisary?

    Sí, absolutamente, aunque el error que muchos no calificados a los desarrolladores hacer es tratar de corregir los errores mediante el método incorrecto, generalmente tiende a registro, cuando deberían de depuración. Hay un lugar para cada uno, pero hay al menos un par de zonas donde el registro es casi siempre necesario:

    • Para el examen de los problemas en tiempo real de código, donde la pausa con el depurador se efecto el resultado del cálculo (concedida, el registro tendrá un impacto leve sobre la sincronización en tiempo real de proceso de este tipo, pero, ¿cuánto depende en gran medida del software)
    • Para las generaciones enviado a los probadores de la beta o de otros colegas que no tienen acceso a un depurador
    • Para volcar los datos en el disco que puede no ser fácil para la vista dentro de un depurador. Por ejemplo, ciertos IDE que no puede analizar correctamente STL estructuras.
    • Para obtener una «sensación» de que el flujo normal de su programa de
    • Para hacer que el código más legible además de comentar, así:
    //Ahora abrir el archivo de datos 
    fp = fopen("datos.bin", "rb"); 
    

    El comentario de arriba podría ser fácilmente colocado en un registro de la llamada:

    const char *kDataFile = "datos.bin"; 
    log("Ahora abrir el archivo de datos %s", kDataFile); 
    fp = fopen(kDataFile, "rb"); 
    

    Que dijo, que en algunos aspectos es correcta. Mediante el mecanismo de registro como una glorificado en la pila de seguimiento registrador se generan muy buenos para la calidad de los archivos de registro, ya que no proporcionan una útil suficiente punto de falla para el desarrollador para examinar. La clave aquí es, obviamente, el correcto y el uso prudente de registro de llamadas, que creo que se reduce a la discreción del promotor. Usted necesita considerar que básicamente estás haciendo los ficheros para mismo; los usuarios no se preocupan por ellos y por lo general extremadamente interpretar erróneamente el contenido de todos modos, pero se puede utilizar para, al menos, determinar por qué su programa portado mal.

    También, es muy raro que un archivo de registro le apuntan a la fuente directa de un cierto error. En mi experiencia, que por lo general proporciona una idea de cómo puede replicar un error y, a continuación, ya sea por el proceso de la replicación o la depuración es, encontrar la causa del problema.

  5. 8

    Que tanto el registro no es necesario. No hay ninguna razón (en producción) para saber cuando cada método se inicia y termina. Tal vez usted necesita que en ciertos métodos, pero al haber tanto ruido en los archivos de registro se les hace casi imposible analizar de manera efectiva.

    Debe iniciar la sesión cuando sucedan cosas importantes, tales como errores, inicios de sesión de usuario (registro de auditoría), transacciones iniciadas, importante, sus datos actualizados,… y así sucesivamente. Si usted tiene un problema que usted no puede determinar a partir de los registros, a continuación, puede añadir más si es necesario… pero sólo si es necesario.

    También, sólo para su información, la adición de una sesión en tiempo de compilación sería un ejemplo de lo que se llama Programación Orientada A Aspectos. El registro sería el de «la cruz de corte preocupación».

  6. 5

    Creo que «los registros de código de relación» es una mala interpretación del problema.

    En mi trabajo me de vez en cuando tienen una situación en la que un error en un programa Java puede ser reproducido fuera del entorno de producción y donde el cliente NO quiere que vuelva a suceder.

    Entonces TODO lo que usted tiene disponibles para usted para corregir el error, es la información que usted mismo ha puesto en los archivos de registro. No hay sesiones de depuración (que está prohibido en los entornos de producción de todos modos) – no se metiese en la entrada de datos – nada!

    De modo que los registros de su máquina del tiempo a cuando apareció el error, y ya que usted no puede predecir de antemano qué información necesitará para corregir un error aún desconocido, de lo contrario sólo podría corregir el error en el primer lugar usted necesita para iniciar un montón de cosas…

    Exactamente QUÉ cosas depende de la situación, pero básicamente, lo suficiente como para asegurarse de que usted nunca está en duda lo que sucede cuando 🙂

    Naturalmente, esto significa que una gran cantidad de registro que va a suceder. Luego va a crear dos registros: uno con todo lo que sólo se mantiene por mucho tiempo suficiente para asegurarse de que usted no lo necesita, y el otro con no trivial de información que se puede mantener por mucho más tiempo.

    Desestimar la tala excesiva, se realiza generalmente por aquellos que no han tenido que solucionar un error con nada más que ir 🙂

    • 10 años más tarde, esto es muy cierto.
  7. 4

    Cuando te encuentras con un error durante la versión beta de su aplicación y no se pueden reproducir, usted sabe que usted debería haber hecho la tala excesiva. Misma forma, si un cliente informa de un error, pero no se puede reproducir en un exceso de función de registro puede salvar el día.

  8. 3

    Cuando se tiene un escenario de cliente (es decir, alguien cuyo equipo no consigue el acceso físico a), las únicas cosas que son «demasiado de registro» se repintado de las funciones y casi nada llamado por ellos (que debe ser casi nada). O otras funciones que son llamadas de 100 veces por segundo durante la operación (inicio del programa es aceptar, aunque, para tener 100 de llamadas para obtener/establecer rutinas registra porque, en mi experiencia, que es donde la mayoría de los problemas se originan).

    De lo contrario, sólo vamos a patear a ti mismo cuando te falta alguna clave de registro de punto que definitivamente dirá cuál es el problema en la máquina del usuario.

    (Nota: aquí me estoy refiriendo a la tala que sucede cuando el seguimiento está habilitado el modo de desarrollador orientado a registros, no orientado al usuario normal funcionamiento de los registros.)

  9. 2

    Cómo muchas de esas líneas son de registro por defecto? He trabajado en un sistema muy parecido a lo que usted describe – acaba de arrancar hasta podría causar más de 20 mb de registros por escrito si el registro fue arrancado manera, pero incluso la depuración no hemos de convertirlo todo el camino para todos los módulos. Por defecto sería de registro cuando un módulo de código se ha introducido, y los principales eventos del sistema. Fue genial para la depuración desde QA sólo podría adjuntar un registro a un billete, y aunque no era reproducible se podía ver lo que estaba pasando cuando ocurrió el problema. Si usted tiene graves multithreading pasando, a continuación, el registro es aún mejor que cualquier IDE o el depurador he trabajado con.

  10. 2

    Me parece que el registro es mucho menos necesario ya que he empezado a utilizar TDD. Esto hace que sea mucho más fácil determinar donde los insectos mentira. Sin embargo, me parece que el registro de las declaraciones puede ayudar a entender lo que está pasando en el código. Seguro, depuradores de ayudar a dar a usted un bajo nivel de idea de lo que está sucediendo. Pero me resulta más fácil cuando puedo coincidir con una línea de salida de una línea de código si quiero obtener una visión de alto nivel de lo que está pasando..

    Sin embargo, una cosa que debo agregar es este: asegúrese de que el registro de las declaraciones de incluir el módulo que el registro de la declaración es en! No puedo contar el número de veces que he tenido que retroceder y buscar donde un registro de instrucción en realidad se encuentra.

  11. 2

    Yo personalmente creo que en primer lugar no hay ninguna regla dura y rápida. Tengo algunas aplicaciones que registra una gran cantidad, dentro y fuera de los métodos, y las actualizaciones de estado a través de la media. Estas aplicaciones, aunque son procesos programados, ejecutar manos, y los registros son analizados por otra aplicación que almacena el éxito/fracaso.

    He encontrado que en toda la realidad, muchas de las aplicaciones de usuario no necesita grandes cantidades de registro, como si realmente los temas que se depurarán para trazar los valores allí. Además normalmente no necesitan de los gastos de registro.

    Sin embargo, lo que realmente depende del proyecto.

  12. 2

    En mi línea de trabajo, tengo que escribir una gran cantidad de servicios de Windows. Para mí, el registro no es un lujo, es en realidad mi única interfaz de usuario. Cuando desplegamos la producción, perdemos el acceso a la depuración e incluso las bases de datos para que nuestros servicios de escribir y sin registro, no tenemos forma de saber los detalles de los problemas que surgen.

    Habiendo dicho eso, creo que una concisa registro estilo es el mejor enfoque. Registro de mensajes tienden a limitarse a la lógica de negocio de la aplicación, tales como «mensaje recibido desde la cuenta de xxx» que «entró en la función de yyy». Softonic registro de excepciones, el hilo se inicia, como un eco de la configuración del entorno y los tiempos. Más allá de eso, nos fijamos en el depurador para identificar errores lógicos en el desarrollo y control de calidad de las fases.

  13. 1

    Debo confesar que cuando comenzó la programación que más o menos se registra todos los detalles, como la describe «Dillie-O».

    Creer… me ayudó mucho durante los días iniciales de la implementación de producción de donde hemos basado en los archivos de registro para resolver cientos de problemas.

    Una vez que el sistema es estable, poco a poco me comenzó a quitar las entradas de registro como su valor agregado comenzó a disminuir. (No Log4j en los punto en el tiempo.)

    Creo, la relación de códigos a las entradas del registro depende del proyecto y el medio ambiente, y no tiene que ser una relación constante.

    Hoy en día hemos montón de flexibilidad en el registro con los paquetes como de Log4j, dinámico habilitante de nivel de registro, etc.

    Pero si los programadores no la usa adecuadamente, como cuando usar cuando NO usar INFORMACIÓN de DEPURACIÓN, ERROR, etc. así como de los detalles en los mensajes de registro (he visto el mensaje de registro como, «Hola X, Hola XX, Hola XXX, etc.», que sólo el programador puede entender) la relación seguirá siendo alta con menos ROI.

  14. 0

    Creo que otro factor es el conjunto de herramientas de plataforma y de los convenios que vienen con él. Por ejemplo, el registro parece ser bastante generalizado en la J(2)EE mundo, mientras que yo no recuerdo haber escrito un registro de instrucción en una aplicación de Ruby on Rails.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea