此文章主要讲解如何使用Nuxt进行日志监控,例如服务端请求日志,方便线上出现问题能及时排查问题所在
一、下载依赖
npm install winston winston-daily-rotate-file
二、plugin下创建日志处理插件winston.js,对日志进行分级
export default function ({ app }) {
if (process.server) {
const winston = require('winston');
const path = require('path');
const { combine, timestamp } = winston.format;
const infoLogPath = path.resolve(process.cwd(), './logs', `info.log`);
const errorLogPath = path.resolve(process.cwd(), './logs', `error.log`);
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.printf(({ timestamp, level, message }) => {
return `${timestamp} [${level}]: ${message}`;
})
),
transports: [
new winston.transports.File({
format: combine(timestamp()),
level: 'info',
filename: infoLogPath,
maxsize: 5 * 1024 * 1024, // 单个日志文件大小
maxFiles: 3 // 最大文件数
}),
new winston.transports.File({
format: combine(timestamp()),
level: 'error',
filename: errorLogPath,
maxsize: 5 * 1024 * 1024,
maxFiles: 3
})
]
});
app.$winstonLog = logger;
}
}
三、插件挂载nuxt.config.js
一定要放在plugins中最前面,后续的插件中才能拿到app.$winstonLog
// nuxt.config.js
export default {
plugins: [
{ src: '~/plugin/winston.js', ssr: true }
....
]
}
四、在服务端请求axios 里做日志打点
捕获在Node端接口请求错误,对日志进行添加
// utils/axios.js
export default ({ $axios, app }) => {
$axios.onResponse((response) => {
// app.$winstonLog只在服务端存在,需要判断是否存在 正常返回这里可以无需记录
if (app.$winstonLog) {
app.$winstonLog.info(`[${response.status}] ${response.request.path}`);
}
return response.data;
});
$axios.onError((err) => {
// 接口请求异常 添加日志记录
if (app.$winstonLog) {
app.$winstonLog.error(
`ServerApi | ${err.request.path} | ${err.message}`
);
app.$winstonLog.error(err.response && err.response.data);
}
});
};
五、查看日志记录
winston会在每次请求页面的时候自动打印一次日志,在 node 端出错的时候也会自动打印日志,会在当前项目中生成logs文件夹