我正在尝试使用nest - winston将所有快速日志和未处理的异常记录在一个文件中。关注以下文章::
- https://www.npmjs.com/package/nest-winston
- https://www.section.io/engineering-education/logging-with-winston/
- Node.js - 记录 / 使用 morgan 和 winston
我对此进行了研究,发现应该使用 morgan 来记录快速日志。
const winston = require("winston");
const morgan = require("morgan");
async function bootstrap() {
const appOptions = {
cors: true,
logger: WinstonModule.createLogger({
transports: [
new winston.transports.Console({}), // ==> 1
new winston.transports.File({
filename:
"logs/Combined-" + new Date(Date.now()).toDateString() + ".log",
level: "info",
handleExceptions: true,
}),
new winston.transports.File({
filename:
"logs/Errors-" + new Date(Date.now()).toDateString() + ".log",
level: "error",
}),
],
format: winston.format.combine(
winston.format.timestamp({
format: "MMM-DD-YYYY HH:mm:ss",
}),
winston.format.printf(
(error) => `${error.level}: ${[error.timestamp]}: ${error.message}`
)
),
}),
};
const app = await NestFactory.create(ApplicationModule, appOptions);
app.setGlobalPrefix("api");
app.use(morgan("combined", { stream: winston.stream.write })); // ==> 2
const options = new DocumentBuilder()
.setTitle("xx")
.setDescription("xx")
.setVersion("1.0")
.setBasePath("api")
.addBearerAuth()
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup("/docs", app, document);
await app.listen(3000);
}
bootstrap();
Winston 正确地将数据记录到文件中。
error: Jul-08-2021 18:12:34: Input data validation failed
error: Jul-08-2021 18:26:28: Input data validation failed
error: Jul-08-2021 18:27:09: Input data validation failed
error: Jul-08-2021 20:57:52: Input data validation failed
info: Jul-08-2021 21:47:40: Mapped {/api/pricing/:id, GET} route
info: Jul-08-2021 21:47:40: Mapped {/api/route/:slug, DELETE} route
info: Jul-08-2021 21:47:40: Nest application successfully started
现在我想记录我插入摩根的所有快速日志,如代码所示(第 2 点)。它记录到控制台,但不记录到文件。但是,如果我注释掉第 1 点,即登录到控制台。项目没有启动。它在低于 2 行后被卡住。我等了 15 分钟,但没有任何进展。
[nodemon] restarting due to changes...
[nodemon] starting `node ./index index.js`