應用場景
① Tomcat
catalina.out其實是tomcat的標準輸出(stdout)和標準出錯(stderr),這是在tomcat的啟動腳本里指定的,如果沒有修改的話stdout和stderr會重定向到這里。所以我們在應用里使用System.out打印的東西都會到這里來。另外,如果我們在應用里使用其他的日志框架,配置了向Console輸出的,則也會在這里出現(xiàn)。
如果Tomcat的catalina.out的大小超過了2G,那么tomcat可能在沒有錯誤提示的情況下崩潰、無法啟動。所以為了避免出現(xiàn)這個問題,我們應該每天分割catalina.out。
② Springboot
啟動腳本中輸出了應用日志nohup java -jar [jvm param] xxx.jar 2 >&1 > nohup.out
,并且在logback中配置了輸出到控制臺,這樣會導致所有的應用日志都會輸出到nohup.out
。
隨著時間的累計控制臺日志回越來越大,我們可以從以下幾點進行處理,防止出現(xiàn)控制臺日志大量輸出導致磁盤溢出。
方案
1.禁止輸出到控制臺中
① 刪除項目中所有的system.out.print[ln]
② springboot 可以在logback/log4j中禁止輸出到控制臺
③ springboot啟動腳本修改為 nohup java -jar [jvm param] xxx.jar 2 >&1 > /dev/null
,將進程日志輸出到空文件中。
2.使用logrotate切割、壓縮、刪除過期文件
logrotate
是一個Linux上的日志文件輪換工具,它可以自動輪換日志文件并保留歷史日志,防止磁盤被日志文件填滿。
使用logrotate可以將日志文件按時間或大小等規(guī)則切割成多個文件,同時可以刪除或壓縮舊日志文件,避免磁盤空間占用過高。
logrotate
的配置文件通常在/etc/logrotate.conf
和/etc/logrotate.d
目錄下,通過配置文件可以指定需要輪換的日志文件、輪換規(guī)則、保存歷史日志的數(shù)量等參數(shù)。logrotate
可以周期性地執(zhí)行輪換任務,可以手動執(zhí)行logrotate
來立即輪換日志文件,也可以通過systemd
的timer
來定時執(zhí)行。
總的來說,logrotate
是一個非常實用的日志處理工具,能夠有效地管理Linux系統(tǒng)中的日志文件,保障系統(tǒng)的穩(wěn)定運行。
簡單配置樣例:
首先在/etc/logrotate.d/目錄創(chuàng)建一個tomcat文檔,內(nèi)容如下:
/data/apache-tomcat-9.0.13/logs/catalina.out
{
copytruncate
daily
rotate 10
compress
missingok
size 16M
}
配置說明:
compress:啟用日志文件壓縮。被切割的日志文件將以.gz的擴展名進行壓縮保存。
delaycompress:延遲壓縮。在下一次輪轉(zhuǎn)周期時,才對前一個周期的日志文件進行壓縮。
nocompress:禁用壓縮。不對切割的日志文件進行壓縮處理。
copytruncate:將當前日志文件進行備份后,截斷原始日志文件,使其從頭開始。通常用于不支持日志文件重新打開的程序。
nocopytruncate:禁用copytruncate選項,不進行備份和截斷操作。
create:創(chuàng)建一個新的空日志文件,以替代被切割的日志文件。
nocreate:禁用create選項,不創(chuàng)建新的日志文件。
ifempty:如果日志文件為空,也進行切割。否則,不進行切割。
notifempty:只有當日志文件非空時,才進行切割。
daily:按每天為周期進行日志文件的切割。
weekly:按每周為周期進行日志文件的切割。
monthly:按每月為周期進行日志文件的切割。
yearly:按每年為周期進行日志文件的切割。
rotate count:保留的切割文件數(shù)量。默認情況下,logrotate會保留最近的count個切割文件,其他文件將被刪除。
maxsize size:設置日志文件的最大大小。當日志文件達到指定的大小時,將觸發(fā)切割。
minsize size:設置日志文件的最小大小。當日志文件小于指定的大小時,將不觸發(fā)切割。
dateext:為每個切割文件添加日期擴展。切割文件將使用日期作為后綴。
dateformat format:自定義日期擴展的格式。可以使用%Y(年份)、%m(月份)、%d(日期)等占位符。
以上是常見的logrotate配置選項,可以根據(jù)需要進行組合和配置。配置文件通常位于/etc/logrotate.conf或/etc/logrotate.d/目錄下。每個日志文件都需要一個單獨的配置條目,可以在配置文件中添加多個條目來處理不同的日志文件。配置完成后,logrotate將按照指定的規(guī)則自動管理和切割日志文件。
自動切割:
每天晚上,
cron daemon
會自動執(zhí)行/etc/cron.daily
目錄下的任務。
這個會觸發(fā)/etc/cron.daily/logrotate
文件,logrotate
一般是隨linux安裝的,它會執(zhí)行這個命令-“/etc/sbin/logrotate /etc/logrotate.conf”(注意空格)。
/etc/logrotate.conf 包含了/etc/logrotate.d
目錄下的所有腳本。這個會觸發(fā)上一步寫的/etc/logrotate.d/tomcat
文件。
手動切割:
執(zhí)行以下語句來手動運行cron任務文章來源:http://www.zghlxwxcb.cn/news/detail-562279.html
/usr/sbin/logrotate /etc/logrotate.conf
# 或
logrotate -vf /etc/logrotate.d/tomcat
3.自定義處理
可以使用Java、shell來切割,但這樣存在很多風險,要考慮IO、文件權(quán)限、壓縮大小、清理日期等等。既然有開源工具咱就用起來,不要重復造輪子。當然除非現(xiàn)有的工具已經(jīng)滿足不了你的需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-562279.html
到了這里,關于Linux 如何處理tomcat/springboot進程控制臺日志的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!