第一次写node项目,以前除了前端的脚手架构建接触过一些简单的,因此老是碰到不少坑。好比权限验证,好比异常处理,好比日志管理。 在看log4js使用方法的时候忽然想到本身就能够实现简单的业务,不须要借助组件,虽然简单可是实现了挺开心的。前端
本身的node项目写了一段时间了,但一直没有加上日志管理的功能,由于以为不必,不少时候都是在本身电脑上面调试的。 但忽然有一天在线上访问本身的项目,发现页面报错了,想知道为何报错了,发现居然没有什么很好的方法,若是我没有经过一个东西去记录的话,因此日志管理这个时候就显得尤其重要了。node
检查路径是否存在git
建立目录的方法github
读取文件的方法sql
写入文件的方法json
个人业务是定义了两个类型,错误和sql,而后传入日志内容bash
/**
* 写入日志
* @param {String} type // 日志类型 err 错误日志 sql sql日志
* @param {String} content
*/
writeLog (content, type = 'err') {
// 建立不存在的文件夹
await this.dirExists(`log/file/${type}`)
// 获取到文件files
fs.readFile(`log/file/${type}/${utils.switchTime(new Date(), 'YYYY-MM-DD')}.log`, (err, data) => {
if (err) {
console.log(err)
}
// 写入文件
fs.writeFile(`log/file/${type}/${utils.switchTime(new Date(), 'YYYY-MM-DD')}.log`, `${data || ''}\n${content}`, async (err) => {
if (err) {
console.log(err)
}
})
})
}
复制代码
function query (sql) {
// 写入sql
NodeLog.writeLog(sql, 'sql')
return new Promise((resolve, reject) => {
pool.getConnection((err, conn) => {
if (err) {
// 若是是链接断开,自动从新链接
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
setTimeout(query(), 2000);
reject('断开重连');
} else {
console.error(err.stack || err);
reject(err);
}
} else {
// 获得结果
conn.query(sql, (queryErr, result) => {
if (queryErr) {
reject(queryErr);
} else {
resolve(result);
}
// 释放链接
conn.release();
})
}
})
})
}
复制代码
handleException (req, res, e) {
// 写入日志
NodeLog.writeLog(e)
res.json({
code: e.errno || 20501,
success: false,
content: e,
message: '服务器内部错误'
})
}
复制代码
日志完整代码服务器