2010-06-23 15 views
6

En nuestro negocio, necesitamos registrar cada solicitud/respuesta que viene a nuestro servidor. En este momento, estamos utilizando xml como implementación estándar. Los archivos de registro se utilizan si necesitamos depurar/rastrear algún error.Buffers de protocolo de registro

Tengo curiosidad por si cambiamos a los búferes de protocolo, ya que es binario, ¿cuál será la mejor manera de registrar la solicitud/respuesta al archivo?

Por ejemplo:

salida FileOutputStream = new FileOutputStream ("archivos \ \ log.txt"); request.build(). WriteTo (outout);

Para cualquiera que haya usado búferes de protocolo en su aplicación, ¿cómo registra su solicitud/respuesta, en caso de que la necesitemos con fines de depuración?

Gracias

Respuesta

0

Si ha compitiendo necesidades para el registro y el rendimiento a continuación, supongo que se podría volcar los datos binarios en el fichero tal cual, tal vez con cada registro precedido por una etiqueta que contiene una marca de tiempo y un valor de longitud por lo sabrá dónde termina este bit de datos en particular. Pero me apresuro a admitir que esto es muy feo. Tendrá que escribir una utilidad para leer y analizar este archivo, y será impotente sin esa utilidad.

Una solución más razonable sería volcar sus datos binarios en forma de texto. Estoy pensando en "líneas" de texto, una vez más comenzando con la información de etiquetado que encuentre relevante, seguido de cierta información de longitud en decimal o hex, seguido de tantos bytes hexadecimales como sea necesario para volcar el búfer, por lo que podría terminar con algunas líneas bastante largas. Pero dado que el archivo está estructurado en línea, puede usar herramientas orientadas a texto (un editor en el caso más simple) para trabajar con él. El vaciado hexadecimal significa esencialmente que está utilizando dos bytes en el registro para representar un byte de datos (más un poco de sobrecarga). Heh, el espacio en el disco es barato en estos días.

Si esos búfers binarios tienen una estructura bastante uniforme, incluso podría dividir y etiquetar campos (o algo así) para que sus datos sean un poco más legibles y, lo que es más importante, se puedan buscar mejor. Por supuesto, depende de usted la cantidad de esfuerzo que desea invertir para que sus registros de registro se vean bonitos; pero el tiempo que pasamos aquí bien puede pagar un poco más tarde en el análisis.

1

Utilizamos el método ShortDebugString() en el objeto C++ para escribir una versión legible para humanos de todos los mensajes entrantes y salientes en un archivo de texto. ShortDebugString() devuelve una versión de una línea de la misma cadena devuelta por el método toString() en Java. No estoy seguro de lo fácil que es lograr lo mismo en Java.

1

TL; DR: escribe los registros de depuración en el texto, escribe los registros a largo plazo en binario.

Hay al menos dos maneras de hacer este registro (y tal vez, de hecho, usted debe hacer ambas cosas):

  1. o escritura de registros en formato de texto. Esto es bueno para la depuración y para verificar rápidamente si hay problemas con los ojos.
  2. Escribiendo sus registros en formato binario - esto hará que los análisis futuros sean mucho más rápidos ya que puede cargar los datos usando el mismo código de búfer de protocolo y hacer todo tipo de cosas en ellos.

Honestamente, esto es más o menos la forma en que se hace en el lugar de donde provino esta tecnología.

+0

"Honestamente, esto es más o menos la forma en que se hace en el lugar de donde provino esta tecnología". - Los almacenamientos intermedios del protocolo vinieron de Google. ¿Quiere decir que sabe que Google está utilizando Buffers de Protocolo para el registro estructurado? ¿Tienes más información sobre eso? –

Cuestiones relacionadas