Como posso obter logextate dateext para refletir a data do log em vez da data de rotação?

5

Minha configuração de logrotate do Apache tem esta aparência:

/var/log/http/*log {
    monthly
    dateext
    dateformat .%Y.%m
    [... rest stripped for brevity ...]
}

Isso funciona muito bem, exceto que a data no nome do arquivo girado é um período posterior ao período realmente coberto pelos logs, por exemplo, error_log.2012.09 abrange de 2012-08-01 a 2012-08-31.

Eu percebo que existem outras opções para o Apache (por exemplo, cronolog), mas eu tenho um monte de outros logs que eu também preciso rodar, e logrotate é realmente exatamente o que eu preciso além desta questão.

Existe uma maneira de fazer o logrotate usar um deslocamento de data - ou, melhor ainda, descobrir o período de tempo anterior - ao gerar o nome do arquivo girado?

    
por Adam 02.10.2012 / 03:48

2 respostas

12

Adicionado na versão 3.8.0 (embora olhando para o histórico do svn, parece que foi realmente adicionado em 3.7.9):

link

- added "dateyesterday" option (see man page)
    
por 03.10.2012 / 20:49
1

se logrotate em seu distrib ainda não tiver a opção 'dateyesterday', você pode usar scripts como os seguintes:

LOGFILE="$1"
LOGMTIME="$(env LC_ALL='C' stat $LOGFILE |awk '/^Modify/{print $2}')"
LOGSTART=$(( $(date +%Y%m%d -d "${LOGMTIME}") - 1 ))
mv $LOGFILE ${LOGFILE%-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}-$LOGSTART

Notas:

    O script
  1. funcionará corretamente apenas no caso da opção "diária"
  2. se estiver operando em vários arquivos, coloque o bloco de código em "para LOGFILE em $ @" loop.
  3. sequência ' - [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] 'é o logrotate padrão de glob padrão, consulte a descrição da opção dateext do logrotate man.
por 21.04.2015 / 14:38

Tags