Linux下Tomcat catalina.out自動歸檔
如果 catalina.out 日志達到 2GB 大小的時候,Tomcat 因為緩存問題,便沒有辦法繼續輸出日志了。
為了避免這種情況,你需要及時對 catalina.out 進行歸檔。
實際上 Tomcat 自身也會對日志內容進行歸檔,但是歸檔後,Tomcat 不會清理 catalina.out 的內容,這將會導致 catalina.out 越來越大。
下面的方法能夠使用在 linux/unix 的機器上。
如果我們期望每天對日志進行歸檔,我們可以按照下面的方法進行配置:
執行命令:
[java] view
plain copy
vi /etc/logrotate.d/tomcat
輸入下面的內容:
[java] view
plain copy
/usr/local/tomcat/logs/catalina.out {
copytruncate
daily
dateext
nocompress
missingok
}
完成上面的工作後,你可以不需要在你的操作系統中做任何工作,日志歸檔程序將會每天對你的日志進行歸檔的。
執行下面一個命令:
[java] view
plain copy
/usr/sbin/logrotate -f /etc/logrotate.conf
logrotate 也可以直接執行 後直接跟配置文件就可以了。
-v 給出詳細信息
-d debug模式,不更改日志文件內容 模擬執行
-f 強制執行,忽略所有規則
程序歸檔的結果如下:
你可以看到在 Tomcat 的日志目錄下創建了一個文件:
-rw-rw-r-- 1 tomcat tomcat 133540 Jul 13 09:39 catalina.out-20110713
這個就是我們幾天內的歸檔文件。
關於參數的說明:
重要的參數:
dateext: 在歸檔文件後,將會使用日期進行標注。如果這參數不指定的話,歸檔文件將會標注為數字。
如下面的內容:
-rw-rw-r-- 1 tomcat tomcat 33790228 Jul 13 09:33 catalina.out.1
有人會問,這個是每天的時候執行歸檔的呢?
1、查看系統默認的定時任務配置:cat /etc/crontab
可以看到有這麼一條【02 4 * * * root run-parts /etc/cron.daily】內容,這是系統默認的每天凌晨4點02分執行調度任務
2、我們到目錄【/etc/cron.daily】下面,可以看到 logrotate 這個文件。
那如何自己定義歸檔時間?(一般不需要)
很簡單,我們刪除/etc/cron.daily/logrotate 然後編輯/etc/crontab文件 指定自己的時間執行下面的命令即可。
[java] view
plain copy
/usr/sbin/logrotate -f /etc/logrotate.conf
===========================================================================
logrotate 配置詳解
對於Linux 的系統安全來說,日志文件是極其重要的工具。系統管理員可以使用logrotate 程序用來管理系統中的最新的事件,對於Linux 的系統安全來說,日志文件是極其重要的工具。系統管理員可以使用logrotate 程序用來管理系統中的最新的事件。logrotate 還可以用來備份日志文件,本篇將通過以下幾部分來介紹
日志文件的管理:
1、logrotate 配置
2、缺省配置 logrotate
3、使用include 選項讀取其他配置文件
4、使用include 選項覆蓋缺省配置
5、為指定的文件配置轉儲參數
一、logrotate 配置
logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,並創建新的日志文件,我們把它叫做“轉儲”。我們可以根據日志文件的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程序來執行。
logrotate 程序還可以用於壓縮日志文件,以及發送日志到指定的E-mail 。
logrotate 的配置文件是 /etc/logrotate.conf。主要參數如下表:
參數 功能
compress 通過gzip 壓縮轉儲以後的日志
nocompress 不需要壓縮時,用這個參數
copytruncate 用於還在打開中的日志文件,把當前日志備份並截斷
nocopytruncate 備份日志文件但是不截斷
create mode owner group 轉儲文件,使用指定的文件模式創建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮。
errors address 專儲時的錯誤信息發送到指定的Email 地址
ifempty 即使是空文件也轉儲,這個是 logrotate 的缺省選項。
notifempty 如果是空文件的話,不轉儲
mail address 把轉儲的日志文件發送到指定的E-mail 地址
nomail 轉儲時不發送日志文件
olddir directory 轉儲後的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統
noolddir 轉儲後的日志文件和當前日志文件放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲周期為每天
weekly 指定轉儲周期為每周
monthly 指定轉儲周期為每月
rotate count 指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
tabootext [+] list 讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 當日志文件到達指定的大小時才轉儲,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
二、缺省配置 logrotate
logrotate 缺省的配置募?/etc/logrotate.conf。
Red Hat Linux 缺省安裝的文件內容是:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# send errors to root
errors root
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# system-specific logs may be configured here
缺省的配置一般放在logrotate.conf 文件的最開始處,影響整個系統。在本例中就是前面12行。
第三行weekly 指定所有的日志文件每周轉儲一次。
第五行 rotate 4 指定轉儲文件的保留 4份。
第七行 errors root 指定錯誤信息發送給root。
第九行create 指定 logrotate 自動建立新的日志文件,新的日志文件具有和
原來的文件一樣的權限。
第11行 #compress 指定不壓縮轉儲文件,如果需要壓縮,去掉注釋就可以了。
三、使用include 選項讀取其他配置文件
include 選項允許系統管理員把分散到幾個文件的轉儲信息,集中到一個
主要的配置文件。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定文件讀入配置信息,就好像他們已經在/etc/logrotate.conf 中一樣。
第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟件包時,使用include 選項十分有用。RPM 軟件包的日志轉儲參數一般存放在/etc/logrotate.d 目錄。
include 選項十分重要,一些應用把日志轉儲參數存放在 /etc/logrotate.d 。
典型的應用有:apache, linuxconf, samba, cron 以及syslog。
這樣,系統管理員只要管理一個 /etc/logrotate.conf 文件就可以了。
四、使用include 選項覆蓋缺省配置
當 /etc/logrotate.conf 讀入文件時,include 指定的文件中的轉儲參數將覆蓋缺省的參數,如下例:
# linuxconf 的參數
/var/log/htmlaccess.log
{ errors jim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr -a /var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr +a /var/log/htmlaccess.log
endscript
}
/var/log/netconf.log
{ nocompress
monthly
}
在這個例子中,當 /etc/logrotate.d/linuxconf 文件被讀入時,下面的參數將覆蓋/etc/logrotate.conf中缺省的參數。
Notifempty
errors jim
五、為指定的文件配置轉儲參數
經常需要為指定文件配置參數,一個常見的例子就是每月轉儲/var/log/wtmp。為特定文件而使用的參數格式是:
# 注釋
/full/path/to/file
{
option(s)
}
下面的例子就是每月轉儲 /var/log/wtmp 一次:
#Use logrotate to rotate wtmp
/var/log/wtmp
{
monthly
rotate 1
}
六、其他需要注意的問題
1、盡管花括號的開頭可以和其他文本放在同一行上,但是結尾的花括號必須單獨成行。
2、使用 prerotate 和 postrotate 選項
下面的例子是典型的腳本 /etc/logrotate.d/syslog,這個腳本只是對
/var/log/messages 有效。
/var/log/messages
{
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
postrotate
/usr/bin/kill -HUP syslogd
/usr/bin/chattr +a /var/log/messages
endscript
}
第一行指定腳本對 /var/log messages 有效
花括號外的/var/log messages
prerotate 命令指定轉儲以前的動作/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”屬性 endscript 結束 prerotate 部分的腳本postrotate 指定轉儲後的動作
/usr/bin/killall -HUP syslogd
用來重新初始化系統日志守護程序 syslogd
/usr/bin/chattr +a /var/log/messages
重新為 /var/log/messages 文件指定“只追加”屬性,這樣防治程序員或用戶覆蓋此文件。
最後的 endscript 用於結束 postrotate 部分的腳本
3、logrotate 的運行分為三步:
判斷系統的日志文件,建立轉儲計劃以及參數,通過cron daemon 運行下面的代碼是 Red Hat Linux 缺省的crontab 來每天運行logrotate。
#/etc/cron.daily/logrotate
#! /bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
4、/var/log/messages 不能產生的原因:
這種情況很少見,但是如果你把/etc/services 中的 514/UDP 端口關掉的話,這個文件就不能產生了。
小結:本文通過對Red Hat 系統上典型的logrotate 配置例子的介紹,詳細說明了logrotate 程序的應用方法。希望對所有Linux 系統管理員有所幫助。管理好,分析好日志文件是系統安全的第一步,在以後的文章裡FreeLAMP還會介紹另外一個檢查日志的好東東 logcheck。
來源:http://blog.csdn.net/catoop/article/details/25105969