我找不到存储 nodejs 日志文件的地方。因为在我的节点服务器中我有“分段错误”,我想查看日志文件以获取更多信息......
4 回答
你可能对永远感兴趣。它将运行带有日志记录选项的 .js-File 24/7。以下是帮助文本中的两个片段:
[Long Running Process] forever 进程将继续运行,将日志消息输出到控制台。前任。永远 -o out.log -e err.log my-script.js
和
[守护进程]永久进程将作为守护进程运行,这将使目标进程在后台启动。这对于在不使用 nohup 的情况下远程启动简单的 node.js 脚本非常有用。建议使用 -o -l, & -e 启动。前任。永远开始 -l forever.log -o out.log -e err.log my-daemon.js 永远停止 my-daemon.js
如果您在开发中使用 docker,您可以在另一个 shell 中执行此操作: docker attach running_node_app_container_name
这将向您显示 STDOUT 和 STDERR。
对于 nodejs 日志文件,您可以使用 winston 和 morgan 代替您的 console.log() 语句,用户 winston.log() 或其他 winston 方法来记录。要使用 winston 和 morgan,您需要使用 npm 安装它们。示例: npm i -S winston npm i -S morgan
然后在你的项目中创建一个名为 winston 的文件夹,然后在该文件夹中创建一个 config.js 并复制下面给出的代码。
const appRoot = require('app-root-path');
const winston = require('winston');
// define the custom settings for each transport (file, console)
const options = {
file: {
level: 'info',
filename: `${appRoot}/logs/app.log`,
handleExceptions: true,
json: true,
maxsize: 5242880, // 5MB
maxFiles: 5,
colorize: false,
},
console: {
level: 'debug',
handleExceptions: true,
json: false,
colorize: true,
},
};
// instantiate a new Winston Logger with the settings defined above
let logger;
if (process.env.logging === 'off') {
logger = winston.createLogger({
transports: [
new winston.transports.File(options.file),
],
exitOnError: false, // do not exit on handled exceptions
});
} else {
logger = winston.createLogger({
transports: [
new winston.transports.File(options.file),
new winston.transports.Console(options.console),
],
exitOnError: false, // do not exit on handled exceptions
});
}
// create a stream object with a 'write' function that will be used by `morgan`
logger.stream = {
write(message) {
logger.info(message);
},
};
module.exports = logger;
复制上述代码后,创建一个名为 logs 的文件夹,与 winston 或任何您想要的位置平行,并在该日志文件夹中创建一个文件 app.log。返回 config.js 并将第 5 行“filename: ${appRoot}/logs/app.log
”中的路径设置为您创建的相应 app.log。
在此之后转到您的 index.js 并在其中包含以下代码。
const morgan = require('morgan');
const winston = require('./winston/config');
const express = require('express');
const app = express();
app.use(morgan('combined', { stream: winston.stream }));
winston.info('You have successfully started working with winston and morgan');