node路继续,我们上一次说到了使用原生的node如何对我们的项目进行日志的记录,在看此篇文章前,推荐先看如何使用原生的node进行日志记录,因为这里我们不会再说到原理的东西,毕竟之前我们已经说到了,这里我们直接使用morgan在两大框架中进行日志的记录:
- express 脚手架安装的项目中,已经进行了基本的日志记录了,包括在koa中,也是使用了一个koa-logger在开发环境下进行日志的记录, 但这些日志都是打印在控制台的,在开发环境下我们也只需要打印在控制台即可,但是当项目上线后,我们就还是需要写入到文件中了,那么我们就介绍下如何配置morgan将我们的日志记录到文件中:(注: 在express中使用morgan和在koa中使用morgan其实是一模一样的,所以我们只介绍一种就好了,这里还是使用的express)
- 由于在express脚手架中已经默认装上了morgan,所以我们就无需再配置安装了.
- express中的morgan的默认配置如下:
const logger = require("morgan")
// .........
app.use(logger("dev"))
- 其实它省略了它的默认的第二个参数,它还可以接受一个参数,默认如下所示:
app.use(logger("dev", {
stream: process.stdout
}))
- 这里的stream其实就是我们上次中说到的流,而他的默认配置参数: process.stdout 表示的是标准的输出,这里可以理解就是输入到控制台上;
- 修改morgan的第二个参数配置进行日志记录到文件:
- 思路: 我们只需将morgan的第二个参数配置成一个写入流,它的stream就会将日志信息写入到我们指定的写入流文件中:
// 引入fs创建写入流
const fs = require("fs")
const path = require("path")
// .....
// 进行morgan配置:
const fileName = path.join(__dirname, "logs", "access.log")
// 创建写入流:
const writeStream = fs.createWriteStream(fileName, {
flags: "a"
})
app.use(logger("dev", {
stream: writeStream
}))
- 经过上述简单的配置,我们再访问时,就会将日志信息记录到我们的logs文件夹下的access.logs文件中去。 morgan的第一个参数是日志信息的配置,"dev"的信息如下:
:method :url :status :response-time ms - :res[content-length]
这是开发环境简单的日志信息,在线上环境下推荐使用的是: “conbined”(信息包括:)
:remote-addr - :remote-user [:date[clf]] “:method :url HTTP/:http-version” :status :res[content-length] “:referrer” “:user-agent”
这些信息我们可以在github上查找morgan进行查看:
而我们的线上和开发环境的日志记录是有区别的,我们的开发环境打印到控制台即可,线上环境上才需要写入到文件中,所以我们可以使用cross-env进行线上和线下环境日志的不同的处理,具体如下:
const ENV = process.env.NODE_ENV
if (ENV !== 'production') {
app.use(logger('dev', {
stream: process.stdout // 默认配置: 将日志流输出到控制台,precess.stdout
}));
} else {
// 若是线上环境
const logFileName = path.join(__dirname, 'logs', 'access.log')
const writeStream = fs.createWriteStream(logFileName, { // 创建文件的写入流
flags: 'a'
})
app.use(logger('combined', { // dev 环境下: 输出
stream: writeStream // 传递给一个写入流,将实际的日志写入到这个写入流中
}));
}
- 在koa中我们使用的是 koa-morgan, koa中需要进行自行的安装,安装后的配置和express中是一样的,就不再赘述了,下次我们说的是安全问题,关于一些xss注入的处理