diff --git a/coco.js b/coco.js index cc99c5a..cca38e4 100644 --- a/coco.js +++ b/coco.js @@ -2,6 +2,7 @@ // consola works in nodejs and browser // chalk 和 colors 用法类似。 +const util = require('util') const colors = require('colors') function routeNow () { @@ -9,108 +10,127 @@ function routeNow () { return pageNow?.route || 'VueApp' } +function deepInspect (args = [], colors = false) { + return args.map((arg) => util.inspect(arg, { showHidden: false, depth: null, colors })) +} + module.exports = globalThis.uni && globalThis.UniApp // && globalThis.getApp?.()?.constructor?.name === 'Vue' ? { - // 客户端 uniapp - cclog (...args) { - console.log( - `%c ${new Date().toJSON()} [LG] ${routeNow()}`, - 'background: #808080; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args + // 客户端 uniapp + cclog (...args) { + console.log( + `%c ${new Date().toJSON()} [LG] ${routeNow()}`, + 'background: #808080; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) + ) + }, + ccinfo (...args) { + console.info( + `%c ${new Date().toJSON()} [IF] ${routeNow()}`, + 'background: #0000ff; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) + ) + }, + ccgood (...args) { + console.info( + `%c ${new Date().toJSON()} [OK] ${routeNow()}`, + 'background: #2ecc71; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) + ) + }, + ccwarn (...args) { + console.warn( + `%c ${new Date().toJSON()} [WA] ${routeNow()}`, + 'background: #f39c12; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) + ) + }, + ccerror (...args) { + console.error( + `%c ${new Date().toJSON()} [ER] ${routeNow()}`, + 'background: #c0392b; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) + ) + }, + ccdebug (...args) { + if (process.env.NODE_ENV !== 'production') { + console.debug( + `%c ${new Date().toJSON()} [DB] ${routeNow()}`, + 'background: #ff0000; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', + ...deepInspect(args) ) - }, - ccinfo (...args) { - console.info( - `%c ${new Date().toJSON()} [IF] ${routeNow()}`, - 'background: #0000ff; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args - ) - }, - ccgood (...args) { - console.info( - `%c ${new Date().toJSON()} [OK] ${routeNow()}`, - 'background: #2ecc71; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args - ) - }, - ccwarn (...args) { - console.warn( - `%c ${new Date().toJSON()} [WA] ${routeNow()}`, - 'background: #f39c12; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args - ) - }, - ccerror (...args) { - console.error( - `%c ${new Date().toJSON()} [ER] ${routeNow()}`, - 'background: #c0392b; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args - ) - }, - ccdebug (...args) { - if (process.env.NODE_ENV !== 'production') { - console.debug( - `%c ${new Date().toJSON()} [DB] ${routeNow()}`, - 'background: #ff0000; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;', - ...args - ) - } - }, - } + } + }, + } : typeof uniCloud !== 'undefined' - ? { + ? { // uniCloud 云空间 // HBuilder 内置环境的 console 不支持颜色。为了检查是否支持颜色,测试 uniCloud 是否存在(不存在说明在自己的server环境里), // 或 require('supports-color'),相应的返回不同的函数。 cclog (...args) { - console.log(new Date().toJSON(), '[LG]', ...args) + console.log(new Date().toJSON(), '[LG]', ...deepInspect(args)) }, ccinfo (...args) { - console.info(new Date().toJSON(), '[IF]', ...args) + console.info(new Date().toJSON(), '[IF]', ...deepInspect(args)) }, ccgood (...args) { - console.info(new Date().toJSON(), '[OK]', ...args) + console.info(new Date().toJSON(), '[OK]', ...deepInspect(args)) }, ccwarn (...args) { // console.warn will appear in pm2's error log - console.warn(new Date().toJSON(), '[WA]', ...args) + console.warn(new Date().toJSON(), '[WA]', ...deepInspect(args)) }, ccerror (...args) { // console.error will appear in pm2's error log - console.error(new Date().toJSON(), '[ER]', ...args) + console.error(new Date().toJSON(), '[ER]', ...deepInspect(args)) }, ccdebug (...args) { if ('production' !== process.env.NODE_ENV) { // 在server的测试环境下. 注意在 uniCloud 环境下,`process.env.NODE_ENV` 不存在. 如要应用本方法,需要手动设置 `process.env.NODE_ENV` - console.log(new Date().toJSON(), '[DB]', ...args) + console.log(new Date().toJSON(), '[DB]', ...deepInspect(args)) } }, } - : { + : { // 后台服务器命令行。注意如果输出重定向到文件里,会有 ESC[34m2023-10-07T12:32:00.915ZESC[39m 这样的特殊标识。 // 在 pm2 里,为了防止特殊标志,可用 --no-color cclog (...args) { - console.log(colors.blue(new Date().toJSON()), '[LG]', ...args) + console.log(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[LG]'), ...deepInspect(args, true)) }, ccinfo (...args) { - console.info(colors.blue(new Date().toJSON()), '[IF]', ...args) + console.info(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[IF]'), ...deepInspect(args, true)) }, ccgood (...args) { - console.info(colors.green(new Date().toJSON()), '[OK]', ...args) + console.info(colors.bgWhite(new Date().toJSON()), colors.bgGreen('[OK]'), ...deepInspect(args, true)) }, ccwarn (...args) { // console.warn will appear in pm2's error log - console.warn(colors.yellow(new Date().toJSON()), '[WA]', ...args) + console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow('[WA]'), ...deepInspect(args, true)) }, ccerror (...args) { // console.error will appear in pm2's error log - console.error(colors.red(new Date().toJSON()), '[ER]', ...args) + console.error(colors.bgWhite(new Date().toJSON()), colors.bgRed('[ER]'), ...deepInspect(args, true)) }, ccdebug (...args) { if ('production' !== process.env.NODE_ENV) { // 在server的测试环境下. 注意在 uniCloud 环境下,`process.env.NODE_ENV` 不存在. 如要应用本方法,需要手动设置 `process.env.NODE_ENV` - console.log(colors.rainbow(new Date().toJSON()), '[DB]', ...args) + console.log(colors.rainbow(new Date().toJSON()), colors.rainbow('[DB]'), ...deepInspect(args, true)) } }, + ccinput (headers, path, indata) { + console.log(colors.bgWhite(new Date().toJSON()), colors.bgCyan('[LG] (Request-Headers)'), colors.cyan(headers)) + console.log(colors.bgWhite(new Date().toJSON()), colors.bgBlue(`[IF] (IN) ${path}`), colors.blue(util.inspect(indata, { showHidden: false, depth: null, colors: false }))) // 已经被 colors.xxx 进行上色了 + }, + ccoutput (path, outdata) { + console.log(colors.bgWhite(new Date().toJSON()), colors.bgGreen(`[OK] (OUT) ${path}`), colors.green(util.inspect(outdata, { showHidden: false, depth: null, colors: false }))) // 已经被 colors.xxx 进行上色了 + }, + ccexcept (path, error) { + outdata = { _state: 'WOBASE_EXCEPTION', error } + console.error(colors.bgWhite(new Date().toJSON()), colors.bgRed(`[ER] (OUT) ${path}`), colors.red(util.inspect(outdata, { showHidden: false, depth: null, colors: true }))) + }, + ccunknown (path) { + console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow(`[WA] (OUT) ${path}`), colors.yellow({ _state: 'WOBASE_API_UNKNOWN', response: 401 })) + } + }