当前位置: 首页 > 后端技术 > Node.js

mongodb-morgan保存日志

时间:2023-04-03 17:01:09 Node.js

将日志保存在日志文件中//app.jsvarlogger=require('morgan');varfs=require('fs')varlogDirectory=path.join(__dirname,'log')fs.existsSync(日志目录)||fs.mkdirSync(logDirectory)varaccesLogStream=FileStreamRotator.getStream({date_format:'YYYYMMDD',文件名:path.join(logDirectory,'access-%DATE%.log'),频率:'daily',verbose:false})app.use(logger(logger.compile(`[joke]:req[User-Agent]:req[Referer]`),{stream:accesLogStream}))//运行结果//使用postman请求几次保存mongodb中的日志//models/log.jslet{Schema}={require('mongoose')}letLog=newSchema({userAgent:{type:String,default:''},referrer:{type:String,default:''}})modole.exports=mongoose.model('Log',Log)//app.jsvarlogger=require('morgan');varlog=require('./models/log.js')varwriteToDB={write:function(line){var[,ua,re]=line.split('')varele=newLog({userAgent:ua,referrer:re})ele.save(err=>{if(err){console.log('err',err)}})}}/*morgan的源码是这样写的stream.write(line+'\n'),所以为morgan指定的stream属性值的write属性就是把日志保存到数据的方法*/app.use(logger(logger.compile(`[joke]:req[User-Agent]:req[Referer]`),{stream:writeToDB}))记录一个bug并写入log进入mongodb报如下错误:'E11000duplicatekeyerrorcollection:confusion.logsindex:userAgent_1dupkey:{:null}'我在网上找到的解决方法是db.addresses.createIndex({"xmpp_id":1},{sparse:true})当时看不懂用很暴力的方法解决的问题。方法如下:打开mongodb的指南针,打开对应集合的Indexes面板。删除了错误消息中的索引。然后打开相应集合的文档面板。删除错误信息中没有索引的文档。(不到万不得已不要用这个方法!!!)