Strapi日志功能:保存日志为文件到本地

需求

将每次前端请求过来的api请求都保存为日志,并按日期储存为本地文件。

日志工具

simple-node-logger (日志库,你换其他也可以)

实现步骤

  • 引入日志库

在根目录下创建helpers文件夹,并创建logger.js文件

// helpers/logger.js
const simpleLogger = require('simple-node-logger');

const logger = simpleLogger.createRollingFileLogger({
  logDirectory: 'logs/',
  fileNamePattern: 'strapi_log_<DATE>.log',
  dateFormat: 'YYYY.MM.DD',
});

module.exports = logger;
  • 在根目录下创建logs文件夹,用来放日志文件

  • 在根目录config文件夹下创建policies文件夹,并创建log.js文件

// config/policies/log.js
const logger = require('../../helpers/logger');

module.exports = async (ctx, next) => {
    let message = ctx.request.url;
    if (ctx.request.header.name) {
        message += ' ';
        // 前端 encodeURIComponent 参数;
        message += decodeURIComponent(ctx.request.header.name)
    }
    logger.info(message);
    return await next();
}

Policies 策略是能够在每个请求到达控制器的操作之前对其执行特定逻辑的函数。它们主要用于简单地保护业务逻辑。项目的每个路由都可以关联到一组策略。
参考文档

  1. 以我的一个集合tip为例,在api/tip/config/routes.json下配置全局Policies 策略
    在这里插入图片描述
  2. 保存,重启,完成
    在这里插入图片描述
    如果你已经实现功能,且不想了解其他方法,那么到此为止,就可以点右上角叉叉了。

其他方法

  1. 如果你不想使用全局,那就在每个集合下单独创建policies 文件夹,如api/tip/config/policies,然后创建log.js或者其他名字文件,在api/tip/config/routes.json里配置的时候去掉global相关字样就可以了

  2. 如果你不想写policies,你可以在Controllers 层来添加日志逻辑。例如在api\tip\controllers\tip.js文件中重写代码

// api/tips/controller/tip.js
const logger = require('../../../helpers/logger');

module.exports = {
  async find(ctx){
    logger.info('Log information to log files');
    logger.error('Log error to log files');
    return 'Hello World!';
  }
}

机智的你似乎已经发现,你这样的操作已经重写了原有的find逻辑,因此现在所有http://localhost:1337/tips请求都将返回Hello World!。有补救方法吗?当然有,看下面

// api/tips/controller/tip.js
const logger = require('../../../helpers/logger');

module.exports = {
  async find(ctx){
    logger.info('Log information to log files');
    logger.error('Log error to log files');
    // 获取数据
    const entity = await strapi.services.tip.find();
    return entity;
  }
  ...
  // 其他的方法,如post、put,如果需要都要写一遍
}

补救方法是在代码里加上获取数据逻辑,当然更好的建议是你根本就不要去overwrite这个文件!重写之前请想想自己的代码能力!

参考资料:https://cloud.tencent.com/developer/ask/sof/540967/answer/829537

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值