Linux环境下Node.js日志存储位置取决于运行配置,主要分为以下几种常见场景:
若未通过代码或工具指定日志文件路径,Node.js应用使用console.log()、console.error()等内置方法输出的日志,会直接显示在运行应用的终端(标准输出stdout/标准错误stderr)。此时日志未持久化存储到文件,仅在终端可见。
若通过Winston、Bunyan、Pino等第三方日志库记录日志,存储位置由库的配置决定。例如:
transports.File指定路径,如将日志写入./logs/app.log(相对路径)或/var/log/myapp.log(绝对路径);stream选项将日志写入文件,如fs.createWriteStream('/path/to/bunyan.log');destination参数指定文件路径,如pino({ level: 'info' }, '/path/to/pino.log')。
需检查应用代码中的日志库配置以确定具体路径。若通过PM2管理Node.js应用,日志默认存储在用户主目录下的.pm2/logs目录中。文件名格式为<app-name>-out.log(标准输出)和<app-name>-err.log(标准错误),其中<app-name>是PM2启动应用时指定的名称(如pm2 start app.js --name my-app)。
若将Node.js应用配置为Systemd服务(如创建/etc/systemd/system/my-nodejs-app.service文件),日志由systemd的journald服务管理。可通过以下命令查看:
journalctl -u my-nodejs-app.service # 查看指定服务的日志
journalctl -u my-nodejs-app.service -f # 实时跟踪日志
若需将日志写入系统日志文件(如/var/log/syslog或/var/log/messages),需在Systemd服务文件中配置StandardOutput=syslog和StandardError=syslog。
启动应用时,可通过命令行将标准输出和标准错误重定向到指定文件,例如:
node app.js > /path/to/output.log 2>&1 & # 将stdout和stderr合并写入output.log
node app.js >> /path/to/output.log 2>&1 & # 追加模式写入(不覆盖原有内容)
此时日志会持久化存储到指定的文件路径中。