第七章:nodejs koa2 mysql redis 全栈开发--(线上PM2部署和日志)

PM2简单介绍:

1、pm2 是开源的基于Nodejs的进程管理器,包括守护进程、监控、日志的一整套完整的功能;

2、pm2 基本是node应用程序不二的守护进程选择;

3、事实上,pm2并不仅仅可以启动node程序,对于一般的脚本程序同样可以胜任;

4、pm2 带有负载均衡功能,可以保持node应用进程永远运行在后台;

5、pm2 还有个非常强大的deploy功能,可以从本地直接部署线上网站。
 

为何要使用PM2:

1、服务器稳定性

2、充分利用服务器硬件资源,以便提高性能

3、进程守护,系统崩溃自动重启

4、启动多进程,充分利用CPU和内存

5、自带日志记录功能

6、多进程与redis(内存共享)

 

如何配置PM2: 

1、首页我们要 全局安装  npm install pm2 -g

2、在根目录中加入pm2.conf.json文件(具体参数说明可以查看备注)

{
    "apps": {
        "name": "pm2-test-server", // 名称
        "script": "bin/www", // 启动文件
        "watch": true, // 监听代码变化自动重启
        "ignore_watch": [ // 忽略监听文件
            "node_modules",
            "logs"
        ],
//        "instances": 4, // 多进程 一般有多少核cpn就启动多少个进程
        "error_file": "logs/err.log", // console.error('输出')
        "out_file": "logs/out.log", // console.log('输出')
        "log_date_format": "YYYY-MM-DD HH:mm:ss" // 在每个日志输入之前 都加上 日期时间
    }
}

进行了上面的配置之后,我们就可以用 console.log('')或者console.error('')把相关的日志打印到文件中,下面是对应的打印:

console.log('输出')  ==》  logs/out.log

console.error('输出')  ==》 logs/err.log

3、修改package.json文件,直接用 npm run prd 在生产中启动即可

 "scripts": {
    "start": "npm run dev",
    "dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
    "prd": "cross-env NODE_ENV=production pm2 start pm2.conf.json",
    "test": "echo \"Error: no test specified\" && exit 1"
  }

4、我们要在日志中打印 请求方法、请求API、请求参数、响应内容、响应时间

接下来我们来修改一下 app.js

// logger
app.use(async (ctx, next) => {
  // 打印请求参数
  if (ctx.method === 'GET') {
      console.log(JSON.stringify(ctx.request.query))
  } else {
      console.log(JSON.stringify(ctx.request.body))
  }
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) // 打印开始请求和响应的时间差
})

之前的统一输出文件中resModel.js 打印一下响应内容:

class BaseModel {
    constructor(data, message) {
        if (typeof data === 'string') {
            this.message = data
            data = null
            message = null
        }
        if (data) {
            this.data = data
        }
        if (message) {
            this.message = message
        }
    }
}
// 成功
class SuccessModel extends BaseModel {
    constructor(data, message) {
        super(data, message)
        this.code = 0
        console.log(this) // 打印日志
    }
}
// 错误
class ErrorModel extends BaseModel {
    constructor(data, message) {
        super(data, message)
        this.code = -1
        console.log(this) // 打印日志
    }
}
// token 认证失败
class LoginFailure extends BaseModel {
    constructor(data, message) {
        super(data, message)
        this.code = 401
        console.log(this) // 打印日志
    }
}

// 自定义code,方便特殊情况下返回特殊code,不能和上面已建的code重复
class CustomModel extends BaseModel {
    constructor(code, data, message) {
        super(data, message)
        this.code = code
        console.log(this) // 打印日志
    }
}
module.exports = {
    SuccessModel,
    ErrorModel,
    LoginFailure,
    CustomModel
}

接下来 我们来试试 启动服务器

接下来跑一下之前的登录接口试试

在文件中也有:

我们无论在服务中查看还是在日志文件中都可以查看到对应的请求和响应信息了

也许有些同学会问:日志文件不停的记录在out.log或者err.log中,那么它们的体积将会越来越大,不止会影响性能,甚至会导致死机,的确是的,这个时候就需要OP出手了,把日志文件进行分割,按照日期或者体积就根据你们站点的访问量吧!(如果公司没有OP,你们也可以,具体的可以查资料)

PM2常用命令:

pm2 start ...   #启动

pm2 list     #查看启动列表

pm2 restart  <AppName>/<id>   #重启

pm2 stop <AppName>/<id>   #暂停

pm2 delete <AppName>/<id>  #删除

pm2 info  <AppName>/<id>   #查看信息

pm2 log  <AppName>/<id>   #查看进程日志

pm2 monit  <AppName>/<id>   #查看cpu内容信息

........等等

 

总结:日志是后台最重要的一项功能,如果没有日志功能,等于人没有了眼睛,根本不知道别人在您的站点中干了什么,也可以用日志来进行分析,警告等等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值