O multilog de Dan Bernstein aparentemente pode fazer isso - ou talvez a maior parte dele, enquanto fornece uma saída por meio de descritores de arquivos para ! processador para compensar a diferença que você desejar - embora as especificações de tamanho 20M / 1G possam levar alguns recursos, uma vez que 16M é o limite externo por log. O que segue é, na maioria, uma seleção copiar + colar do link acima, embora o link também detalhe outras opções, como o registro de data e hora por linha, mantendo [um] outro arquivo [s] contendo apenas a linha mais recente correspondente padrão e mais.
Interface
multilog script
... script consiste em qualquer número de argumentos. Cada argumento especifica uma ação. As ações são executadas para cada linha de entrada.
Selecionando linhas
Cada linha é inicialmente selecionada. A ação ...
-pattern
... desmarca a linha se o padrão corresponder à linha. A ação ...
+pattern
seleciona a linha se padrão corresponder à linha.
... padrão é uma cadeia de estrelas e não estrelas. Ele corresponde a qualquer concatenação de strings correspondidas por todas as estrelas e não estrelas na mesma ordem. Uma não-estrela corresponde a si mesma. Uma estrela antes do final do padrão corresponde a qualquer string que não inclua o próximo caractere no padrão. Uma estrela no final do padrão corresponde a qualquer string.
Registros girados automaticamente
Se dir começar com um ponto ou barra, a ação ...
dir
... anexa cada linha selecionada a um log chamado dir . Se dir não existir, multilog
o cria.
O formato do log é o seguinte:
-
dir é um diretório contendo algum número de arquivos de log antigos, um arquivo de log chamado atual e outros arquivos para multilog
para manter o controle de seus arquivos. ações.
-
Cada arquivo de log antigo tem um nome que começa com @ , continuando com um registro de data e hora preciso mostrando quando o arquivo foi concluído e terminando com um dos seguintes códigos:
-
.s : Este arquivo é completamente processado e gravado com segurança em disco.
-
.u : Este arquivo estava sendo criado no momento de uma interrupção. Pode ter sido truncado. Não foi processado.
A ação ...
ssize
... define o tamanho máximo do arquivo para ações subseqüentes de dir . multilog
decidirá que atual é grande o suficiente se atual tiver tamanho bytes. ( multilog
também decidirá que a corrente é grande o suficiente se vir uma nova linha em 2000 bytes do tamanho máximo do arquivo; ela tenta terminar os arquivos de log nos limites da linha.) tamanho deve estar entre 4096 e 16777215. O tamanho de arquivo máximo padrão é 99999.
Nas versões 0.75 e superiores: Se multilog
receber um sinal ALRM , ele decide imediatamente que atual é grande o suficiente, se atual não é vazio.
(Nota: Eu suspeito que o zsh
schedule
builtin poderia ser facilmente persuadido a enviar um ALRM
em intervalos especificados, se necessário.)
A ação ...
nnum
... define o número de arquivos de log para as ações dir subsequentes. Depois de renomear atual , se multilog
visualizar num ou mais arquivos de log antigos, ele removerá o arquivo de log antigo com o menor registro de data e hora. num deve ser pelo menos 2. O número padrão de arquivos de log é 10.
A ação ...
!processor
... define um processador para ações subseqüentes dir . multilog
alimentará atual através do processador e salvará a saída como um arquivo de log antigo em vez de atual . multilog
também salvará qualquer saída que o processador grava no descritor 5 e tornará a saída legível no descritor 4 quando executar o processador no próximo arquivo de log. Para confiabilidade, o processador deve ser diferente de zero se tiver algum problema ao criar sua saída; multilog
executará novamente. Note que a execução do processador pode bloquear qualquer entrada de alimentação do programa para multilog
.