在Ubuntu系統中,分析Node.js日志可通過命令行工具、進程管理工具、第三方日志分析工具及日志庫配置等方式實現,覆蓋從基礎查看、篩選到高級可視化、集中管理的全流程需求。
命令行工具是最常用的基礎分析手段,適合快速定位問題或提取關鍵信息:
tail
:實時查看日志末尾內容tail -f /path/to/your/app.log
可實時跟蹤日志文件的新增內容(如應用運行狀態、請求響應),按Ctrl+C
退出。常用于監控應用的實時運行情況。cat
/less
:查看完整日志內容cat /path/to/your/app.log
可直接輸出日志文件的全部內容(適合小文件);less /path/to/your/app.log
則支持分頁查看(按q
退出),更適合大文件。grep
:篩選特定關鍵字grep 'error' /path/to/your/app.log
可提取包含“error”的日志行(區分大小寫);若需忽略大小寫,可添加-i
參數(如grep -i 'error'
)。常用于快速定位錯誤信息。awk
/sed
:復雜文本處理awk
適合統計分析(如統計某時間段的請求數):awk '/\[.*\]/ {count++} END {print count}' /path/to/your/app.log
(假設日志中時間戳用[]
包裹);sed
適合篩選或修改內容(如刪除所有“debug”行):sed '/debug/d' /path/to/your/app.log > filtered.log
。PM2是Node.js常用的進程管理工具,可自動重啟應用、監控性能并集中管理日志:
npm install -g pm2
全局安裝,啟動應用時使用pm2 start app.js --name my-app
(--name
指定應用名稱)。pm2 logs my-app
可實時查看應用的日志輸出(包括stdout
和stderr
);若需查看歷史日志,可使用pm2 logs my-app --lines 100
(顯示最近100行)。pm2 ecosystem.config.js
文件可配置日志路徑、輪轉策略(如按天分割、保留7天),例如:module.exports = {
apps: [{
name: 'my-app',
script: 'app.js',
out_file: '/var/log/my-app.log', // 標準輸出日志路徑
error_file: '/var/log/my-app-error.log', // 錯誤輸出日志路徑
log_date_format: 'YYYY-MM-DD HH:mm Z' // 日志時間格式
}]
};
```。
對于生產環境或海量日志,建議使用第三方工具實現集中管理、實時分析、可視化及告警:
file
input插件讀取日志文件),并進行過濾(如解析JSON格式、提取字段);rsyslog
或fluentd
將Node.js日志發送到Graylog,利用其強大的搜索語法(如level:error
)和儀表盤功能,快速定位問題。goaccess /path/to/your/access.log -o /var/www/html/report.html --log-format=COMBINED
可生成HTML格式的報告,通過瀏覽器訪問查看。選擇合適的日志庫可實現結構化日志(便于后續自動化處理),提升日志分析效率:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // 結構化日志格式
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 錯誤日志單獨存儲
new winston.transports.File({ filename: 'combined.log' }), // 所有日志合并
new winston.transports.Console() // 控制臺輸出
]
});
logger.info('User logged in', { userId: 123 }); // 記錄帶上下文的日志
```。
bunyan
CLI工具用于查看和轉換日志:const bunyan = require('bunyan');
const logger = bunyan.createLogger({ name: 'myapp' });
logger.info('Request received', { method: 'GET', url: '/api/users' });
使用bunyan -o short /path/to/app.log
可將JSON日志轉換為易讀的格式。pino-cli
工具用于過濾和格式化日志:const pino = require('pino')();
pino.info('User created', { userId: 456, status: 'active' });
使用pino -c 'level>=error' /path/to/app.log
可篩選出錯誤級別以上的日志。使用logrotate
工具可自動輪轉、壓縮、刪除舊日志,避免單個日志文件占用過多磁盤空間:
sudo apt-get install logrotate
安裝,創建/etc/logrotate.d/nodejs
文件,內容如下:/path/to/your/nodejs.log {
daily # 每天輪轉
missingok # 若日志不存在也不報錯
rotate 7 # 保留7個舊日志
compress # 壓縮舊日志(如.gz格式)
notifempty # 若日志為空則不輪轉
create 0640 root adm # 新日志文件的權限和所有者
}
該配置會每天輪轉nodejs.log
,保留最近7天的壓縮日志。通過以上方法,可在Ubuntu系統上高效地分析Node.js日志,從基礎的問題定位到高級的可視化、集中管理,滿足不同場景的需求。