2009-04-23 23 views
10

Mi pregunta es simple: qué escribir en un registro. ¿Hay alguna convención? ¿Qué tengo que poner?¿Qué escribir en el archivo de registro?

Dado que mi aplicación tiene que ser lanzada, me gustaría tener registros amigables, que puedan ser leídos por la mayoría de las personas sin preguntar de qué se trata.

Ya tengo algunas ideas, como una marca de tiempo, un identificador único para cada función/método, etc. Me gustaría tener varios niveles de registro, como seguimiento/depuración, información, errores/advertencias.

¿Utiliza algunos recursos de registro preformateados?

Gracias

+2

Por lo que vale la pena, los registros normalmente no están destinados a ser leídos por los usuarios, por lo que la mayoría de las personas tratan de hacerlos más informativos que "amigables" ... –

+2

@David: ¿Qué? La mayoría de los registros los leen los administradores, que son una clase de usuarios. No estoy seguro de lo que estás hablando. "Amigable" para un administrador generalmente significa "Completo" - sello de fecha, ID de sesión, nombre del módulo, nivel de gravedad, un mensaje que se ajusta en una línea, etc. –

+0

amigable significa aquí que el formato de registro será fácil de analizar, leer, y ofrecer la posibilidad a cualquier usuario (como un usuario actual o un administrador) de poder con la mayoría de las herramientas tener información pertinente sobre la aplicación –

Respuesta

9

Aquí están algunas sugerencias para el contenido:

  • marca de tiempo
  • mensaje
  • registro de tipo de mensaje (por ejemplo, error, aviso, vestigios, depuración)
  • Identificación del hilo (para que pueda entender el archivo de registro desde una aplicación multihilo)

mejores prácticas para la implementación:

  • poner un mutex todo el método de escritura de modo que usted puede estar seguro de que cada escritura es hilo de seguridad y tendrá sentido.
  • Envíe 1 mensaje por vez al archivo de registro y especifique el tipo de mensaje de registro cada vez. Luego puede establecer qué tipo de registro desea ejecutar al iniciar el programa.
  • No utilice almacenamiento en búfer en el archivo, o enjuague a menudo en caso de que se produzca un bloqueo del programa.

Editar: me he dado cuenta de la pregunta fue etiquetado con Python, así que por favor véase la respuesta de S. Lott antes que la mía. Puede ser suficiente para sus necesidades.

+0

Acepté esta respuesta, porque está respondiendo a mi espera, incluso si el enlace proporcionado por S.Lott fue útil. Gracias –

18

Es bastante agradable, y ya está implementado.

Lea esto: http://docs.python.org/library/logging.html


Editar

"fácil de analizar, leer," generalmente son características contradictorias. Inglés: fácil de leer, difícil de analizar. XML: fácil de analizar, difícil de leer. No hay un formato que sea fácil de leer y fácil de analizar. Algunos formatos de registro "no son horribles de leer y no son imposibles de analizar".

Algunas personas crean varios controladores para que un registro tenga varios formatos: un resumen para que las personas lean y una versión XML para el análisis automatizado.

1

Dado que etiquetó su pregunta python, lo remito a this question también. En cuanto al contenido, la propuesta de Brian es buena. Sin embargo, recuerde agregar el nombre del programa si está utilizando un registro compartido.

Lo importante de un archivo de registro es "greppability". Intente proporcionar toda su información en una sola línea, con los identificadores de cadena apropiados que son únicos (también en raíz) para una condición particular. En cuanto a la marca de tiempo, utilice el estándar ISO-8601 que se clasifica muy bien.

0

timeStamp es decir DateTime AAAA/MM/DD: HH: mm: ss: ms usuario Tema ID Función Nombre Mensaje/Mensaje de error/Mensaje de éxito/función Trace

tienen esta en formato XML y puede escribir fácilmente un analizador para ello.

<log> 
    <logEntry DebugLevel="0|1|2|3|4|5...."> 
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" /> 
    <ThreadId value="" /> 
    <FunctionName value="" /> 
    <Message type="Error|Success|Failure|Status|Trace"> 
     Your message goes here 
    </Message> 
    </logEntry> 
</log> 
+3

Algunas personas piensan que XML es la respuesta a todo (también lo hacen algunos regex bods), pero no estoy de acuerdo. Es igual de fácil (posiblemente más fácil) analizar un archivo de registro de formato fijo con herramientas normales de procesamiento de texto que un archivo XML. Y no terminas con todo ese "ruido" en el archivo ocupando un espacio inútil. – paxdiablo

+0

Algunas personas piensan que son sus pensamientos los que deciden qué es correcto y qué no. Uno puede estar en desacuerdo, pero no prueba nada. Y, por cierto, algunas personas están aquí simplemente para imponerles su autoridad. Sugiero que es hora de que aprendamos a respetar y dar espacio a los demás. Algún tiempo la solución puede no ser tan importante como participar. –

+0

Debo admitir que no me gusta mucho XML, es una opinión personal, y le agradezco la proposición, pero me siento más cómodo con un archivo de texto simple que con archivos xml desordenados, eso dijo, estoy de acuerdo en algunos caso es útil, especialmente en aplicaciones web. –

1

Una buena idea es mirar el software de análisis de registros. A menos que planee escribir uno propio, probablemente quiera explotar un paquete de análisis de registro existente como Analog. Si ese es el caso, probablemente desee generar un resultado de registro lo suficientemente similar a los formatos que acepta. ¡Te permitirá crear bonitos cuadros y gráficos con un mínimo esfuerzo!

1

En mi opinión, lo mejor es utilizar las bibliotecas de registro existentes como log4j (or it's variations for other languages). Le da control sobre cómo se formatean sus mensajes y puede cambiarlo sin tocar su código. Sigue las mejores prácticas, es robusto y lo usan millones de usuarios. Por supuesto, puede escribir su propio marco de registro, pero eso sería algo muy extraño de hacer, a menos que necesite algo muy específico. En cualquier caso, recorra su documentación y vea cómo se presentan los resúmenes.

log4py Salida - Python portado versión de log4j, creo que hay varias implementaciones para Python por ahí ..

0

biblioteca de registro de Python son hilos de proceso seguro para subprocesos de proceso individuales.

Cuestiones relacionadas