以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。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。