El multilog de Dan Bernstein aparentemente puede hacer esto, o tal vez la mayor parte, al tiempo que proporciona una salida a través de descriptores de archivo al procesador para compensar la diferencia que desee, aunque las especificaciones de tamaño 20M / 1G pueden tomar un poco de dificultad, ya que parece que 16M es su Límite exterior por registro. Lo que sigue es, en su mayoría, una selección de copiar + pegar del enlace de arriba, aunque el enlace también detalla otras opciones, como la marca de tiempo por línea, manteniendo [otro] archivo [s] que contiene solo el patrón de coincidencia de línea más reciente y más .
Interfaz
multilog script
... el script consta de cualquier número de argumentos. Cada argumento especifica una acción. Las acciones se llevan a cabo en orden para cada línea de entrada.
Seleccionar líneas
Cada línea se selecciona inicialmente. La acción...
-pattern
... deselecciona la línea si el patrón coincide con la línea. La acción...
+pattern
selecciona la línea si el patrón coincide con la línea.
... el patrón es una cadena de estrellas y no estrellas. Coincide con cualquier concatenación de cadenas que coincidan con todas las estrellas y no estrellas en el mismo orden. Un no-estrella se iguala a sí mismo. Una estrella antes del final del patrón coincide con cualquier cadena que no incluya el siguiente carácter en el patrón. Una estrella al final del patrón coincide con cualquier cadena.
Registros rotados automáticamente
Si dir comienza con un punto o una barra, entonces la acción ...
dir
... agrega cada línea seleccionada a un registro llamado dir . Si dir no existe, lo multilog
crea.
El formato de registro es el siguiente:
dir es un directorio que contiene cierto número de archivos de registro antiguos, un archivo de registro denominado actual y otros archivos para multilog
realizar un seguimiento de sus acciones.
Cada archivo de registro antiguo tiene un nombre que comienza con @ , continúa con una marca de tiempo precisa que muestra cuándo se terminó el archivo y termina con uno de los siguientes códigos:
- .s : este archivo está completamente procesado y escrito de forma segura en el disco.
- .u : este archivo se estaba creando en el momento de una interrupción. Puede haber sido truncado. No ha sido procesado.
La acción...
ssize
... establece el tamaño máximo de archivo para acciones dir posteriores . multilog
decidirá que la corriente es lo suficientemente grande si la corriente tiene bytes de tamaño . ( multilog
también decidirá que la corriente es lo suficientemente grande si ve una nueva línea dentro de los 2000 bytes del tamaño máximo del archivo; intenta finalizar los archivos de registro en los límites de la línea). El tamaño debe estar entre 4096 y 16777215. El tamaño máximo predeterminado del archivo es 99999.
En las versiones 0.75 y superiores: si multilog
recibe una señal ALRM , inmediatamente decide que la corriente es lo suficientemente grande, si la corriente no es vacía.
(Nota: sospecho que se zsh
schedule
podría persuadir fácilmente a la unidad para que envíe una ALRM
a intervalos específicos si es necesario).
La acción...
nnum
... establece el número de archivos de registro para acciones dir posteriores . Después de renombrar actual , si multilog
ve num o más archivos de registro antiguos, elimina el archivo de registro anterior con la marca de tiempo más pequeña. num debe ser al menos 2. El número predeterminado de archivos de registro es 10.
La acción...
!processor
... establece un procesador para acciones dir posteriores . multilog
alimentará la corriente a través del procesador y guardará la salida como un archivo de registro antiguo en lugar de actual . multilog
también guardará cualquier salida que el procesador escriba en el descriptor 5, y hará que esa salida sea legible en el descriptor 4 cuando ejecute el procesador en el siguiente archivo de registro. Para mayor confiabilidad, el procesador debe salir de cero si tiene algún problema para crear su salida; multilog
luego lo ejecutará nuevamente. Tenga en cuenta que el procesador en ejecución puede bloquear cualquier entrada de alimentación de programa multilog
.