Nodejs express 错语日志的问题
Nodejs express 错语日志的问题
不知道express记录错误并写入日志文件应该怎么做,有成功过的伙伴,分享一下经验,谢谢!!!
当然可以。在使用 Node.js 和 Express 时,记录错误并将其写入日志文件是一个非常常见的需求。这不仅可以帮助你追踪应用的运行情况,还可以在出现问题时快速定位问题所在。
下面我将提供一个简单的示例来展示如何设置 Express 应用来记录错误并将其写入日志文件。
步骤 1: 安装必要的依赖
首先,你需要安装 morgan
和 winston
这两个库。morgan
是一个 HTTP 请求日志中间件,而 winston
则是一个强大的日志库。
npm install express morgan winston
步骤 2: 设置 Express 应用
接下来,我们将创建一个简单的 Express 应用,并配置它来记录错误到日志文件中。
const express = require('express');
const morgan = require('morgan');
const winston = require('winston');
// 配置 Winston 日志
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
defaultMeta: { service: 'your-service-name' },
transports: [
//
// - Write all logs with importance level of `error` or less to `error.log`
// - Write all logs with importance level of `info` or less to `combined.log`
//
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
]
});
// 如果不是生产环境,则将日志打印到控制台
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
// 使用 Morgan 中间件来记录 HTTP 请求
const app = express();
app.use(morgan('combined', {
stream: {
write: message => logger.info(message)
}
}));
// 示例路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 错误处理中间件
app.use((err, req, res, next) => {
logger.error(`${err.status || 500} - ${err.message} - ${req.originalUrl} - ${req.method} - ${req.ip}`);
res.status(err.status || 500);
res.send({
status: err.status || 500,
message: err.message
});
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`);
});
解释
- Winston 配置: 我们配置了
winston
来将错误信息写入error.log
文件,并将所有信息写入combined.log
文件。 - Morgan 中间件: 使用
morgan
记录 HTTP 请求,并通过stream
将其输出到winston
的日志中。 - 错误处理中间件: 在最后添加了一个错误处理中间件,用于捕获所有未处理的错误,并将它们记录到日志中。
这样,你的 Express 应用就会自动记录所有的 HTTP 请求以及任何发生的错误,并将这些信息保存到指定的日志文件中。
或是有其他记录错误日志方法的伙伴也欢迎分享.
没人肯告诉一声
你可以自己写个中间件,第三方的也很多啊!
log4js 有for connect的日志中间件
要将Express应用中的错误记录到日志文件中,你可以使用morgan
和winston
这两个流行的中间件。morgan
用于HTTP请求日志,而winston
则可以用来配置更详细的错误日志。以下是如何实现的步骤:
1. 安装依赖
首先,你需要安装必要的npm包:
npm install express morgan winston
2. 设置 Morgan 和 Winston
创建一个logger.js
文件来设置winston
,并在app.js
或你的主服务器文件中使用它。
logger.js
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new transports.File({ filename: 'error.log', level: 'error' }),
new transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
format: format.simple()
}));
}
module.exports = logger;
app.js
const express = require('express');
const morgan = require('morgan');
const logger = require('./logger');
const app = express();
// 使用morgan记录HTTP请求
app.use(morgan('combined', {
stream: {
write: message => logger.info(message.trim())
}
}));
// 处理错误的中间件
app.use((err, req, res, next) => {
logger.error(`${err.status || 500} - ${err.message} - ${req.originalUrl} - ${req.method} - ${req.ip}`);
res.status(err.status || 500);
res.json({
message: err.message,
status: err.status || 500,
stack: process.env.NODE_ENV === 'production' ? null : err.stack
});
});
// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
3. 测试错误记录
现在你可以通过发送一些无效的请求来测试错误日志是否正常工作。例如,尝试访问不存在的路由:
curl http://localhost:3000/invalid-route
检查error.log
文件,你应该能看到类似如下的输出:
2023-04-01 12:00:00 ERROR: 404 - Cannot GET /invalid-route - /invalid-route - GET - ::1
这样,你就成功地配置了Express应用中的错误日志记录,并将其保存到了日志文件中。