Ubuntu中Node.js日志文件的常见位置及查找方法
若未在代码或启动命令中指定日志文件路径,Node.js应用默认会将日志(如console.log()、console.error()的输出)直接打印到终端控制台,不会生成本地日志文件。此时需通过重定向将日志保存到文件(见下文“自定义日志路径”部分)。
~/.pm2/logs/若通过PM2管理Node.js应用(如pm2 start app.js),日志会自动存储在用户主目录下的.pm2/logs/目录中。文件名格式为:
<应用名称>-out.log:标准输出日志(包含console.log等内容);<应用名称>-err.log:标准错误日志(包含console.error等内容)。my-node-app时,日志路径为~/.pm2/logs/my-node-app-out.log和~/.pm2/logs/my-node-app-err.log。若在代码中通过fs模块或第三方日志库(如winston、log4js)配置了日志路径,日志会存储在指定的目录中。常见示例:
fs模块:const fs = require('fs');
const logFilePath = './logs/app.log'; // 相对路径(项目根目录下的logs文件夹)
const logStream = fs.createWriteStream(logFilePath, { flags: 'a' });
global.console = new console.Console(logStream, logStream);
console.log('This log is written to ./logs/app.log');
此时日志会存储在项目根目录的logs/app.log文件中。winston库:const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: '/var/log/my-node-app/app.log' }) // 绝对路径
]
});
logger.info('This log is written to /var/log/my-node-app/app.log');
日志会存储在/var/log/my-node-app/app.log中。journalctl查看若将Node.js应用作为系统服务(如使用systemd创建.service文件)运行,日志会集成到Ubuntu系统日志中,可通过journalctl命令查看。例如:
journalctl -u my-nodejs-app -f # -f表示实时跟踪日志
其中my-nodejs-app是服务的名称(需与.service文件中的[Service]部分Description一致)。启动应用时,可通过命令行将标准输出(stdout)和标准错误(stderr)重定向到指定文件。例如:
node app.js > ./logs/app.log 2>&1 &
>:将标准输出重定向到./logs/app.log;2>&1:将标准错误合并到标准输出;&:让应用在后台运行。logs/app.log文件中。