Funcionamiento
Lectura incremental
El plugin mantiene un fichero de indice por cada fichero de log procesado. El indice almacena la posicion exacta (en bytes) donde se dejo de leer en la ejecucion anterior. En cada nueva ejecucion, el plugin lee unicamente desde esa posicion hasta el final del fichero, procesando solo el contenido nuevo.
Primera ejecucion
Cuando el plugin encuentra un fichero de log por primera vez, crea su indice apuntando al final del fichero. De esta forma no se procesa el contenido historico del log, evitando volcados masivos de datos antiguos.
Deteccion de rotacion de logs
El plugin detecta automaticamente cuando un fichero de log ha sido rotado:
- Si el fichero ha sido renombrado y se ha creado uno nuevo con el mismo nombre, el plugin lo detecta y comienza a leer desde el principio del nuevo fichero.
- Si el fichero ha sido truncado (su tamano es menor que la posicion guardada), el plugin reinicia la lectura desde el principio.
Purga de indices huerfanos
En cada ejecucion, el plugin verifica que todos los indices almacenados correspondan a ficheros de log que aun existen. Si se ha eliminado un fichero de log, su indice asociado se borra automaticamente, evitando la acumulacion de indices innecesarios.
Codificacion de la salida
Las lineas capturadas se concatenan y se codifican en base64 antes de incluirse en el XML de salida. Esto garantiza que el XML sea valido independientemente del contenido del log, incluyendo caracteres especiales, logs multilingües (japones, ruso, etc.) o contenido binario.
Formato del indice
Cada fichero .idx contiene:
/ruta/absoluta/al/fichero/log
<posicion_bytes> <numero_inode>
- Primera linea: ruta absoluta del fichero de log (usada para la purga de huerfanos).
- Segunda linea: posicion en bytes donde se dejo de leer e identificador interno del fichero (usado para detectar rotaciones).