以cmswing为例,如何定制thinkjs的log日志
发布于 作者:苏南大叔 来源:程序如此灵动~
本文以cmswing的日志功能为例,说一下thinkjs的log项目定制。而thinkjs的log功能又是基于大名鼎鼎的log4j的,cmswing的日志在debug模式下,是输出到console里的。而production模式下,是写入到根目录下的logs目录下面的。

下面是详细的log日志相关定制内容。
区分好运行环境
对于thinkjs的log日志,一般来说,是要区分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'
//...
});
区分log日志输出位置
正常情况下来说,调试模式的话,详细的日志是输出到console里面的,而生产模式下,输出到console里面的信息很有限,大部分日志信息,都是保存到日志文件里面的。所以,无论是生产模式,还是调试模式,在pm2 log <site_name>中,能看到的,都是console里面输出的。但是,日志的详细程序是有很大差别的。
| 调试模式 | console | pm2 log 可以查看全部日志 |
| 生产模式 | console + file | pm2 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输出页面执行时间毫秒数。


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语句。

小结
本文的基本日志设置,可以解释关于thinkjs的大部分日志的疑问,如果您还有更多问题,请参照thinkjs的官方说明。
更多苏南大叔带来的thinkjs的经验文章,请点击这里查看。https://newsn.net/tag/thinkjs。