Le multilog de Dan Bernstein peut apparemment le faire - ou peut-être la plupart, tout en fournissant une sortie via des descripteurs de fichiers à ! Processeur pour compenser la différence comme vous le souhaitez - bien que les spécifications de taille de 20M / 1G puissent prendre un peu de fin car il semble que 16M soit son limite supérieure par journal. Ce qui suit est, dans la majorité, une sélection de copier-coller à partir du lien ci-dessus, bien que le lien détaille également d'autres options telles que l'horodatage par ligne, en conservant [un] autre fichier [s] contenant uniquement le modèle de correspondance de ligne le plus récent et plus encore .
Interface
multilog script
... le script se compose d'un certain nombre d'arguments. Chaque argument spécifie une action. Les actions sont exécutées dans l'ordre pour chaque ligne d'entrée.
Sélection de lignes
Chaque ligne est initialement sélectionnée. L'action...
-pattern
... désélectionne la ligne si le motif correspond à la ligne. L'action...
+pattern
sélectionne la ligne si le motif correspond à la ligne.
... le motif est une chaîne d'étoiles et de non-étoiles. Il correspond à toute concaténation de chaînes correspondant à toutes les étoiles et non-étoiles dans le même ordre. Un non-star se correspond. Une étoile avant la fin du modèle correspond à toute chaîne qui n'inclut pas le caractère suivant dans le modèle. Une étoile à la fin du motif correspond à n'importe quelle chaîne.
Journaux pivotés automatiquement
Si dir commence par un point ou une barre oblique, l'action ...
dir
... ajoute chaque ligne sélectionnée à un journal nommé dir . Si dir n'existe pas, le multilog
crée.
Le format du journal est le suivant:
dir est un répertoire contenant un certain nombre d'anciens fichiers journaux, un fichier journal nommé courant et d'autres fichiers pour multilog
garder une trace de ses actions.
Chaque ancien fichier journal a un nom commençant par @ , se poursuivant par un horodatage précis indiquant la fin du fichier et se terminant par l'un des codes suivants:
- .s : ce fichier est entièrement traité et écrit en toute sécurité sur le disque.
- .u : Ce fichier était en cours de création au moment d'une panne. Il a peut-être été tronqué. Il n'a pas été traité.
L'action...
ssize
... définit la taille maximale du fichier pour les actions dir suivantes . multilog
décidera que le courant est assez grand si le courant a des octets de taille . ( multilog
décidera également que le courant est suffisamment grand s'il voit une nouvelle ligne à moins de 2000 octets de la taille de fichier maximale; il essaie de terminer les fichiers journaux aux limites des lignes.) la taille doit être comprise entre 4096 et 16777215. La taille de fichier maximale par défaut est 99999.
Dans les versions 0.75 et ci - dessus: Si multilog
reçoit un ALRM signal, il décide immédiatement courant est assez grand, si courant est non vide.
(Remarque: je soupçonne que le zsh
schedule
module intégré peut être facilement persuadé d'envoyer un ALRM
à des intervalles spécifiés si nécessaire.)
L'action...
nnum
... définit le nombre de fichiers journaux pour les actions dir suivantes . Après avoir renommé en cours , se multilog
voit num ou plus anciens fichiers journaux, il supprime l'ancien fichier journal avec le plus petit horodatage. num doit être au moins 2. Le nombre de fichiers journaux par défaut est 10.
L'action...
!processor
... définit un processeur pour les actions dir suivantes . multilog
alimentera le courant via le processeur et enregistrera la sortie dans un ancien fichier journal au lieu du courant . multilog
enregistrera également toute sortie que le processeur écrit dans le descripteur 5 et rendra cette sortie lisible sur le descripteur 4 lors de l'exécution du processeur dans le fichier journal suivant. Pour plus de fiabilité, le processeur doit quitter différent de zéro s'il a du mal à créer sa sortie; multilog
l'exécutera à nouveau. Notez que l'exécution du processeur peut bloquer toute entrée d'alimentation de programme multilog
.