我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文以cmswing的日志功能为例,说一下thinkjslog项目定制。而thinkjslog功能又是基于大名鼎鼎的log4j的,cmswing的日志在debug模式下,是输出到console里的。而production模式下,是写入到根目录下的logs目录下面的。

苏南大叔:以cmswing为例,如何定制thinkjs的log日志 - thinkjs-log
以cmswing为例,如何定制thinkjs的log日志(图5-1)

下面是详细的log日志相关定制内容。

区分好运行环境

对于thinkjslog日志,一般来说,是要区分debug模式和production模式的,两者记录的内容和方式是有很大差别的。所以,要先区分好,网站的模式是什么模式。一般来说,如果使用pm2管理进程的话,pm2.json中会定义执行的是production.js,也就是生产模式。而使用node run dev或者node development.js启动的网站的话,这个就会是调试模式。

上述区分仅仅是从经验常理上来说的,对于代码逻辑来说,判断标准只有一个:

const isDev = think.env === 'development';

也就是来自于production.js或者development.js中,配置实例的env参数。例如:

const instance = new Application({
  //...
  env: 'development'
  //...
});

苏南大叔:以cmswing为例,如何定制thinkjs的log日志 - thinkjs_env
以cmswing为例,如何定制thinkjs的log日志(图5-2)

区分log日志输出位置

正常情况下来说,调试模式的话,详细的日志是输出到console里面的,而生产模式下,输出到console里面的信息很有限,大部分日志信息,都是保存到日志文件里面的。所以,无论是生产模式,还是调试模式,在pm2 log <site_name>中,能看到的,都是console里面输出的。但是,日志的详细程序是有很大差别的。

调试模式consolepm2 log 可以查看全部日志
生产模式console + filepm2 log 可以查看极少量信息,大多数需要到logs目录下查看日志文件

文件定义为:src/config/adapter.js

exports.logger = {
  type: isDev ? 'console' : 'dateFile',
  console: {
    handle: Console
  },
  file: {
    handle: File,
    backups: 10, // max chunk number
    absolute: true,
    maxLogSize: 50 * 1024, // 50M
    filename: path.join(think.ROOT_PATH, 'logs/app.log')
  },
  dateFile: {
    handle: DateFile,
    level: 'ALL',
    absolute: true,
    pattern: '-yyyy-MM-dd',
    alwaysIncludePattern: true,
    filename: path.join(think.ROOT_PATH, 'logs/app.log')
  }
};

实际上定义了三种模式,console/dateFile/file,但只使用了两种模式。

type: isDev ? 'console' : 'dateFile',

具体的参数含义,可以参照官方说明。https://thinkjs.org/zh-cn/doc/3.0/logger.html

目前,cmswing共输出了如下几项内容:1,系统启动信息。2,用户页面请求。3,执行的sql语句。其中,后面两项是可以定制的。请查看下面的内容:

log日志输出内容定制之用户请求

用户的页面请求记录配置如下:src/config/middleware.js

{
  handle: 'meta',
  options: {
    logRequest: isDev,
    sendResponseTime: isDev
  }
},
  • logRequest设置的是:是否把用户的页面请求写入到日志。
  • sendResponseTime是指:是否在用户页面请求的header头中,用X-Response-Time输出页面执行时间毫秒数。

苏南大叔:以cmswing为例,如何定制thinkjs的log日志 - log_request
以cmswing为例,如何定制thinkjs的log日志(图5-3)

苏南大叔:以cmswing为例,如何定制thinkjs的log日志 - response_header
以cmswing为例,如何定制thinkjs的log日志(图5-4)

log日志输出内容定制之用sql请求

页面sql执行记录配置如下:src/config/model.js

common: {
  logConnect: isDev,
  logSql: isDev,
  logger: msg => think.logger.info(msg)
},
  • logConnect指sql接入配置信息,比如mysql://root:root@127.0.0.1:3306/dbname
  • logSql指具体的sql语句。

苏南大叔:以cmswing为例,如何定制thinkjs的log日志 - log_sql
以cmswing为例,如何定制thinkjs的log日志(图5-5)

小结

本文的基本日志设置,可以解释关于thinkjs的大部分日志的疑问,如果您还有更多问题,请参照thinkjs的官方说明。

更多苏南大叔带来的thinkjs的经验文章,请点击这里查看。https://newsn.net/tag/thinkjs

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   cmswing    thinkjs