Se você estiver executando em uma plataforma Unix / Linux, poderá fazê-lo facilmente com o comando 'find'. Veja aqui para um bom tutorial. Você poderia gzip-los, se necessário e, em seguida, rm os logs brutos com base na hora da última modificação.
Estamos usando o vlogger para gerenciar nossos logs do apache, o que mantém tudo legal e organizado, mas praticamente impossibilita o uso do logrotate, tanto quanto eu posso ver. por exemplo. nossos access.logs virtuais ficam dentro de seu próprio diretório e são nomeados de forma semelhante a:
/virtual.com/ 20100501-access.log 20100502-access.log 20100503-access.log 20100504-access.log
etc.
Alguém criou um script de limpeza para percorrer os diretórios / var / log / httpd / sub e remover logs antigos? Nós gostamos de usar o vlogger, mas limpar os logs antigos depois é uma dor!
Se você estiver executando em uma plataforma Unix / Linux, poderá fazê-lo facilmente com o comando 'find'. Veja aqui para um bom tutorial. Você poderia gzip-los, se necessário e, em seguida, rm os logs brutos com base na hora da última modificação.
Na verdade, eu não recomendaria usar o tempo modificado porque algo poderia atrapalhar isso e você perderia os registros.
Uma boa solução robusta que eu possa usar é analisar a data de cada arquivo, convertê-los em objetos datetime em python ou perl e, em seguida, excluir logs anteriores a X.
Uma solução mais isolada pode ser algo como o seguinte no shell para excluir logs do mês passado (sem eco, é claro):
echo rm */20100$(($(date +%m) - 1 ))*-access.log
$(( ))
é bash arithmetic, e $( )
é substituição de comando, como você pode ver, eles podem ser aninhados.
Atualmente estou usando o seguinte script python. Eu não lembro porque estou usando a máscara de data padrão, o que é definitivamente estranho. Ajuste o RE definido no MASK, altere o LOGDIR var e configure THRESHOLD como o número de dias que você deseja manter.
#!/usr/bin/env python
# THIS SCRIPT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
# PURPOSE, OR NON-INFRINGEMENT.
import datetime
import os
import re
LOGDIR = '/srv/logs'
MASK = re.compile('(?P<month>\d{2})(?P<day>\d{2})(?P<year>\d{4})\-')
THRESHOLD = 10
topdirs = [d for d in os.listdir(LOGDIR)
if os.path.isdir(os.path.join(LOGDIR, d)) and d[0] != '.']
removed = 0
errors = []
for d in topdirs:
vhost = os.path.join(LOGDIR, d)
for f in os.listdir(vhost):
logfile = os.path.join(vhost, f)
if os.path.isfile(logfile):
m = re.match(MASK, f)
if m:
dt = datetime.date(int(m.group('year')), int(m.group('month')),
int(m.group('day')))
delta = datetime.date.today() - dt
if delta.days > THRESHOLD:
try:
os.unlink(logfile)
except OSError:
errors.append(logfile)
else:
removed += 1
print 'Pruned %d logfiles' % removed
if errors:
print 'Errors:'
print '\n'.join(errors)
Tags apache-2.2