2016-05-12 6 views
1

Ich habe meine Anwendung läuft auf Apache Tomcat. Ich wollte logrotate für die Protokolle konfigurieren, die Apache erstellt.mit Logrotate zu Apache Logs zu drehen

Meine logrotate Config ist wie folgt:

/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 
} 

Ich habe erkannt, dass ich die copytruncate Option nicht für Apache-Logs als Apache eine neue Protokolldatei jeden Tag mit einem Zeitstempel angehängt zu schaffen scheint .

zB: localhost.2016-02-26.log

Ich möchte logrotate kommen und zip früheren Protokollen und löschen Sie die sie (nur die ZIP-Dateien zu halten) und verlassen das aktuelle Protokoll, wie es ist.

Nachtrag:

gerade herausgefunden, dass logrotate für rotierende Protokolle nicht geeignet ist, die Zeitstempel in ihnen haben. Ich bin auf der Suche nach Möglichkeiten, wie ich Logrotate mit solchen Logs oder anderen rotierenden Werkzeugen arbeiten kann, die sich besser zum Drehen solcher Logs eignen.

Antwort

0

Ich habe mein eigenes Bash-Skript erstellt, das dies für mich tut. Es läuft von einem Cron-Job und reißt Musterdateien hoch und löscht Dateien, die älter als eine bestimmte Anzahl von Tagen sind:

#!/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 {} \;