2016-05-12 11 views
1

У меня есть мое приложение, запущенное на apache tomcat. Я хотел настроить logrotate для журналов, созданных apache.используя logrotate для поворота журналов apache

Моего Logrotate конфигурация выглядит следующим образом:

/var/company/apache-tomcat/logs/*.log /var/company/apache-tomcat/logs/*.txt { 
    su root root 
    copytruncate 
    compress 
    dateext 
    dateformat -%s 
    extension gz 
    missingok 
    notifempty 
    rotate 90 
    daily 
} 

Я просто понял, что мне не нужен вариант copytruncate для журналов апача, как апач, кажется, создает новый файл журнал каждый день с отметкой времени, приложенным к ней ,

например: localhost.2016-02-26.log

Я хочу Logrotate прийти и пронестись предыдущие журналы и удалить их (только сохраняя сжатые файлы) и оставить текущий журнал, как это.

Добавление:

Только что узнал, что Logrotate не подходит для ротации логов, которые имеют метки времени в них. Я ищу способы, с помощью которых я могу заставить logrotate работать с такими журналами или другими вращающимися утилитами, которые более подходят для вращения таких журналов.

ответ

0

Я создал свой собственный скрипт bash, который делает это для меня. Он запускается из задания cron и зашифровывает файлы шаблонов и удаляет файлы, которые старше определенного количества дней:

#!/bin/bash 
# Compress logs and run garbage collection 

ME=$(basename $0) 

usage() { 
    echo "Usage:" 
    echo " $ME <log_path> <garbage_collection_days>" 
    echo "Example:" 
    echo " $ME \"/path/to/logfile.log-???????\" 21" 
    echo 
} 

# sanity checking 
[[ $# -ne 2 ]] && usage && exit 1 

file_pattern="${1}" 
gc_days=$2 

# compress logfiles that are older than one day 
nice -n 10 find $file_pattern -mtime +1 -exec gzip {} \; 

# garbage collection 
find $(dirname $file_pattern)/*.gz -mtime +$gc_days -exec rm {} \;