pm2-logrotate是一個(gè)PM2的插件,它可以幫助您自動(dòng)輪換日志文件,以避免日志文件過(guò)大而
pm2-logrotate
是一個(gè)PM2的插件,它可以幫助您自動(dòng)輪換日志文件,以避免日志文件過(guò)大而導(dǎo)致磁盤(pán)空間不足的問(wèn)題。
使用pm2-logrotate
插件,您可以配置日志文件的最大大小和最大保留時(shí)間。一旦日志文件達(dá)到了最大大小或最大保留時(shí)間,pm2-logrotate
會(huì)自動(dòng)將其備份并創(chuàng)建一個(gè)新的日志文件。
以下是使用pm2-logrotate
的步驟:
安裝
pm2-logrotate
插件:pm2 install pm2-logrotate
配置日志文件的最大大小和最大保留時(shí)間。您可以在PM2的配置文件中設(shè)置這些參數(shù),例如:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"logrotate": {
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *"
?}
}
在這個(gè)例子中,日志文件的最大大小是10MB,最大保留時(shí)間是10天。此外,日志文件將在每天的午夜進(jìn)行輪換。
注意,
pm2-logrotate
插件使用Linux系統(tǒng)上的logrotate
工具來(lái)輪換日志文件。因此,您可以在PM2的配置文件中設(shè)置所有logrotate
工具支持的參數(shù)。重啟應(yīng)用程序:
pm2 restart myapp
這樣,pm2-logrotate
插件就會(huì)開(kāi)始輪換日志文件。您可以使用以下命令查看輪換后的日志文件:ls -la logs
以下是更多有關(guān)pm2-logrotate
插件的信息:
每日輪換:您可以使用
rotateInterval
參數(shù)將日志文件設(shè)置為每天自動(dòng)輪換。例如,將rotateInterval
設(shè)置為0 0 * * *
,將在每天午夜輪換日志文件。壓縮備份文件:
pm2-logrotate
插件還支持壓縮備份文件以節(jié)省磁盤(pán)空間。您可以使用compress
參數(shù)啟用壓縮功能。例如,將compress
設(shè)置為true
將啟用壓縮功能。自定義備份文件名:默認(rèn)情況下,
pm2-logrotate
插件會(huì)將備份文件命名為logfilename.YYYY-MM-DD-HH-mm.ss.gz
的格式。您可以使用dateFormat
參數(shù)來(lái)自定義備份文件名的格式。例如,將dateFormat
設(shè)置為YYYY-MM-DD
將備份文件命名為logfilename.YYYY-MM-DD.gz
。手動(dòng)輪換日志文件:如果需要,您可以手動(dòng)輪換日志文件,而不是等待
pm2-logrotate
插件按計(jì)劃輪換日志文件。您可以使用以下命令手動(dòng)輪換日志文件:pm2 trigger myapp logrotate
. 這將立即輪換日志文件并創(chuàng)建一個(gè)新的日志文件。限制備份文件的數(shù)量:您可以使用
maxFiles
參數(shù)來(lái)限制備份文件的數(shù)量。例如,將maxFiles
設(shè)置為5
將保留最近的5個(gè)備份文件,而將舊的備份文件刪除。
使用pm2-logrotate
插件可以避免日志文件過(guò)大而導(dǎo)致磁盤(pán)空間不足的問(wèn)題,同時(shí)也可以更好地管理和保留應(yīng)用程序的日志記錄。
處理多個(gè)日志文件:如果您的應(yīng)用程序需要處理多個(gè)日志文件,例如訪問(wèn)日志、錯(cuò)誤日志等,您可以使用pm2-logrotate
插件來(lái)管理它們。只需在PM2的配置文件中指定所有日志文件的位置和相關(guān)參數(shù)即可。例如:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"access_file": "logs/access.log",
?"logrotate": {
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *"
?}
}
在這個(gè)例子中,我們指定了三個(gè)日志文件的位置和相關(guān)參數(shù):
error_file
、out_file
和access_file
。所有這些日志文件都將使用pm2-logrotate
插件來(lái)管理。配置文件位置:默認(rèn)情況下,
pm2-logrotate
插件會(huì)在PM2進(jìn)程的工作目錄中創(chuàng)建一個(gè)名為pm2-logrotate.json
的配置文件。如果需要,您可以使用config
參數(shù)指定自定義配置文件的位置。例如:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"logrotate": {
? ?"config": "/etc/pm2-logrotate.json",
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *"
?}
}
在這個(gè)例子中,我們指定了自定義配置文件的位置為
/etc/pm2-logrotate.json
。日志格式化:
pm2-logrotate
插件支持多種日志格式化選項(xiàng)。您可以在PM2的配置文件中使用logDateFormat
參數(shù)來(lái)自定義日志文件中的時(shí)間戳格式。例如,將logDateFormat
設(shè)置為YYYY-MM-DD HH:mm:ss
將使用2022-04-26 15:30:00
格式的時(shí)間戳。另外,您可以使用
dateFormat
參數(shù)來(lái)自定義備份文件名的時(shí)間戳格式。例如,將dateFormat
設(shè)置為YYYY-MM-DD
將使用2022-04-26
格式的時(shí)間戳。注意,
pm2-logrotate
插件使用的日志格式化選項(xiàng)是基于Moment.js庫(kù)的。因此,您可以使用Moment.js支持的所有日期格式化選項(xiàng)。
高級(jí)日志輪轉(zhuǎn):除了默認(rèn)的基于文件大小和備份數(shù)量的輪轉(zhuǎn)策略外,pm2-logrotate
插件還支持更高級(jí)的輪轉(zhuǎn)策略。例如,您可以基于時(shí)間、文件數(shù)量或文件大小和時(shí)間的組合來(lái)輪轉(zhuǎn)日志文件。以下是一些常見(jiàn)的高級(jí)輪轉(zhuǎn)策略:
基于時(shí)間的輪轉(zhuǎn):使用
rotateInterval
參數(shù)來(lái)指定日志文件的輪轉(zhuǎn)時(shí)間間隔。例如,將rotateInterval
設(shè)置為0 0 * * *
將在每天午夜輪轉(zhuǎn)日志文件。基于文件數(shù)量的輪轉(zhuǎn):使用
rotateLogs
參數(shù)來(lái)指定當(dāng)日志文件數(shù)量達(dá)到一定限制時(shí)進(jìn)行輪轉(zhuǎn)。例如,將rotateLogs
設(shè)置為10
將在日志文件數(shù)量達(dá)到10個(gè)時(shí)進(jìn)行輪轉(zhuǎn)。基于文件大小和時(shí)間的組合輪轉(zhuǎn):使用
max_size
和rotateInterval
參數(shù)來(lái)指定日志文件的最大大小和輪轉(zhuǎn)時(shí)間間隔。例如,將max_size
設(shè)置為10M
,將rotateInterval
設(shè)置為0 0 * * *
將在每天午夜輪轉(zhuǎn)日志文件,并在每個(gè)日志文件達(dá)到10MB時(shí)進(jìn)行輪轉(zhuǎn)。
您可以根據(jù)需要組合這些參數(shù),以創(chuàng)建自定義的輪轉(zhuǎn)策略。例如,您可以使用以下配置來(lái)每小時(shí)輪轉(zhuǎn)日志文件,并在每個(gè)日志文件達(dá)到1GB或24小時(shí)時(shí)進(jìn)行輪轉(zhuǎn):
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"logrotate": {
? ?"max_size": "1G",
? ?"rotateInterval": "0 * * * *",
? ?"retain": 24,
? ?"dateFormat": "YYYY-MM-DD_HH",
? ?"extension": ".log"
?}
}
自定義備份文件名:默認(rèn)情況下,
pm2-logrotate
插件會(huì)將備份文件命名為原始日志文件名加上一個(gè)時(shí)間戳后綴。例如,如果原始日志文件名為access.log
,備份文件將命名為access.log.2022-04-26_1530
。如果您需要使用自定義備份文件名,可以使用dateFormat
和extension
參數(shù)來(lái)指定自定義格式和擴(kuò)展名。例如,以下配置將使用日期格式化為YYYY-MM-DD_HH
,并將備份文件擴(kuò)展名設(shè)置為.backup
:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"logrotate": {
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *",
? ?"dateFormat": "YYYY-MM-DD_HH
多進(jìn)程應(yīng)用程序的日志輪轉(zhuǎn):如果您的應(yīng)用程序使用多個(gè)進(jìn)程運(yùn)行,
pm2-logrotate
插件默認(rèn)情況下將為每個(gè)進(jìn)程生成一個(gè)單獨(dú)的日志文件。您可以使用rotateLogPath
參數(shù)來(lái)指定所有進(jìn)程共享一個(gè)日志文件。例如,以下配置將所有進(jìn)程的日志寫(xiě)入logs/all.log
:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"log_file": "logs/all.log",
?"logrotate": {
? ?"rotateLogPath": true,
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *",
? ?"dateFormat": "YYYY-MM-DD_HH",
? ?"extension": ".log"
?}
}
自定義日志格式:默認(rèn)情況下,
pm2
會(huì)使用console.log
格式記錄應(yīng)用程序日志。您可以使用pm2-logrotate
插件提供的log_format
參數(shù)來(lái)自定義日志格式。例如,以下配置將使用JSON格式記錄日志:
{
?"name": "myapp",
?"script": "app.js",
?"log_date_format": "YYYY-MM-DD HH:mm Z",
?"error_file": "logs/error.log",
?"out_file": "logs/out.log",
?"logrotate": {
? ?"max_size": "10M",
? ?"retain": 10,
? ?"rotateInterval": "0 0 * * *",
? ?"dateFormat": "YYYY-MM-DD_HH",
? ?"extension": ".log",
? ?"log_format": "{\"date\": \"YYYY-MM-DD HH:mm Z\", \"message\": \"<%= message %>\"}"
?}
}
在這個(gè)例子中,日志將使用JSON格式記錄,并包括日期和日志消息。要自定義日志格式,請(qǐng)使用<%= message %>
模板標(biāo)記來(lái)指定日志消息的位置。
總結(jié):
pm2
是一個(gè)功能強(qiáng)大的進(jìn)程管理器,可以輕松管理多個(gè)Node.js應(yīng)用程序。pm2
附帶一些有用的插件,例如pm2-logrotate
,可以幫助您管理和輪轉(zhuǎn)應(yīng)用程序的日志文件。通過(guò)使用pm2-logrotate
插件的高級(jí)技巧,您可以更好地控制日志文件的大小、數(shù)量、時(shí)間間隔和格式,從而更好地管理應(yīng)用程序的日志。