mongodb php存储日志,mongodb / morgan 保存日志

把日志保存在日志文件里

// app.js

var logger = require('morgan');

var fs = require('fs')

var logDirectory = path.join(__dirname, 'log')

fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)

var accesLogStream = FileStreamRotator.getStream({

date_format: 'YYYYMMDD',

filename: path.join(logDirectory, 'access-%DATE%.log'),

frequency: 'daily',

verbose: false

})

app.use(logger(logger.compile(`[joke] :req[User-Agent] :req[Referer]`), {stream: accesLogStream}))

// 运行结果

// 使用postman请求几次

[joke] PostmanRuntime/7.15.2 -

[joke] PostmanRuntime/7.15.2 -

[joke] PostmanRuntime/7.15.2 -

[joke] PostmanRuntime/7.15.2 http://localhost:3000/dish

把日志保存在mongodb里

// models/log.js

let {Schame} = {require('mongoose')}

let Log = new Schema({

userAgent: {

type: String,

default: ''

},

referrer: {

type: String,

default: ''

}

})

modole.exports = mongoose.model('Log', Log)

// app.js

var logger = require('morgan');

var log = require('./models/log.js')

var writeToDB = {

write: function (line) {

var [, ua, re] = line.split(' ')

var ele = new Log({

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

把日志写入mongodb时报如下错误:'E11000 duplicate key error collection: confusion.logs index: userAgent_1 dup key: { : null }'

我在网上找的解决方法是db.addresses.createIndex( { "xmpp_id": 1 }, { sparse: true } )当时看不懂。用了一个很暴力的方法解决的这个问题。方法如下:

打开mongodb的compass,打开相应的collection的Indexes面板。把报错信息里的index删除了。

再打开相应的collection的Documents面板。把没有报错信息里的index的文档删除了。(不是万不得已不要使用这种方法!!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值