Di Dan Bernstein multilog apparentemente può fare questo - o forse la maggior parte di esso, fornendo al contempo una presa tramite descrittori di file per il processore! Per compensare la differenza come ti piace - anche se i 20m / specifiche dimensioni 1G possono richiedere un certo finagling come sembra 16M è la sua limite esterno per registro. Quello che segue è, nella maggior parte dei casi, una selezione copia + incolla dal link sopra, sebbene il link descriva in dettaglio anche altre opzioni come il timestamp per riga, mantenendo [un] altro file [s] contenente solo il modello di corrispondenza della riga più recente e altro .
Interfaccia
multilog script
... lo script è composto da un numero qualsiasi di argomenti. Ogni argomento specifica un'azione. Le azioni vengono eseguite in ordine per ogni riga di input.
Selezione delle linee
Ogni riga è inizialmente selezionata. L'azione...
-pattern
... deseleziona la linea se il motivo corrisponde alla linea. L'azione...
+pattern
seleziona la linea se il motivo corrisponde alla linea.
... il modello è una serie di stelle e non stelle. Corrisponde a qualsiasi concatenazione di stringhe corrispondenti a tutte le stelle e alle non stelle nello stesso ordine. Una non stella corrisponde a se stessa. Una stella prima della fine del modello corrisponde a qualsiasi stringa che non include il carattere successivo nel modello. Una stella alla fine del motivo corrisponde a qualsiasi stringa.
Registri ruotati automaticamente
Se dir inizia con un punto o una barra quindi l'azione ...
dir
... aggiunge ogni riga selezionata a un registro chiamato dir . Se dir non esiste, lo multilog
crea.
Il formato del registro è il seguente:
dir è una directory che contiene un numero di vecchi file di registro, un file di registro denominato corrente e altri file per multilog
tenere traccia delle sue azioni.
Ogni vecchio file di registro ha un nome che inizia con @ , continua con un timestamp preciso che mostra quando il file è stato terminato e termina con uno dei seguenti codici:
- .s : questo file è completamente elaborato e scritto in modo sicuro su disco.
- .u : questo file è stato creato al momento di un'interruzione. Potrebbe essere stato troncato. Non è stato elaborato
L'azione...
ssize
... imposta la dimensione massima del file per le successive azioni dir . multilog
deciderà che la corrente è abbastanza grande se corrente ha byte di dimensione . ( multilog
deciderà anche che la corrente è abbastanza grande se vede una nuova riga entro 2000 byte della dimensione massima del file; prova a finire i file di registro ai limiti della linea.) La dimensione deve essere compresa tra 4096 e 16777215. La dimensione massima del file predefinita è 99999.
Nelle versioni 0.75 e successive: se multilog
riceve un segnale ALRM , decide immediatamente che la corrente è abbastanza grande, se la corrente è non vuota.
(Nota: sospetto che il zsh
schedule
builtin potrebbe essere facilmente persuaso a inviare un ALRM
intervallo specificato se necessario.)
L'azione...
nnum
... imposta il numero di file di registro per le successive azioni dir . Dopo aver rinominato corrente , se multilog
vede num o più vecchi file di registro, rimuove il vecchio file di registro con il timestamp più piccolo. num deve essere almeno 2. Il numero predefinito di file di registro è 10.
L'azione...
!processor
... imposta un processore per le successive azioni dir . multilog
alimenterà la corrente attraverso il processore e salverà l'output come un vecchio file di registro anziché corrente . multilog
salverà anche qualsiasi output scritto dal processore nel descrittore 5 e renderà leggibile l'output sul descrittore 4 quando esegue il processore sul file di registro successivo. Per affidabilità, il processore deve uscire da zero se ha problemi a creare il suo output; multilog
lo eseguirà di nuovo. Si noti che il processore in esecuzione può bloccare qualsiasi input di alimentazione del programma multilog
.