console.log({_at, ...})

This commit is contained in:
Luk 2024-02-05 09:50:07 +08:00
parent 98ac10723f
commit 7c0b1bce15
7 changed files with 240 additions and 130 deletions

85
cc.js Normal file
View File

@ -0,0 +1,85 @@
const util = require('util')
function deepStringify (args = []) {
if (globalThis.process?.release?.name === 'node') {
return globalThis.wo?.envar?.logDeep ? util.inspect(args, { showHidden: false, depth: null, colors: typeof globalThis.wo?.envar?.logColor === 'undefined' ? true : globalThis.wo?.envar?.logColor }) : args // JSON.stringify(args, null, 2) // in nodejs console, object only shows children of depth < 3 by default. 如果要完整数据,就要进行扩展。
} else if (globalThis.uni && globalThis.UniApp) {
// 可再分为 web 和 app通过 #ifdef 或 globalThis.window/location 判断
return globalThis.wo?.envar?.logDeep ? util.inspect(args, { showHidden: false, depth: null, colors: typeof globalThis.wo?.envar?.logColor === 'undefined' ? true : globalThis.wo?.envar?.logColor }) : args // in browser console, object is expandable by default.
} else if (globalThis.uniCloud) {
return args
} else {
return args
}
}
function routeNow () {
if (globalThis.process?.release?.name === 'node') {
return {} // { _from: routeNow.caller.name } // new Error().stack?.split('\n') , .match(/at (.*?) /g)[2]
} else if (globalThis.uni && globalThis.UniApp) {
return { _from: globalThis.getCurrentPages?.()?.pop?.()?.route?.substring?.(6) || 'VueApp' }
} else {
return {}
}
}
function expandArgs (args) {
if (args.length > 1) {
return { _args: args }
} else if (typeof args[0] === 'object') {
return args[0]
} else {
return { _arg: args[0] }
}
}
module.exports =
{
cclog (...args) {
console.log(deepStringify({
_at: new Date().toJSON(),
_type: 'CLOG', // arguments.callee.name doesn't work in nodejs strict mode
...routeNow(),
...expandArgs(args)
}))
globalThis.UniApp || console.log(',')
},
ccinfo (...args) {
console.info(deepStringify({
_at: new Date().toJSON(),
_type: 'CINFO',
...routeNow(),
...expandArgs(args)
}))
globalThis.UniApp || console.log(',')
},
ccwarn (...args) {
console.warn(deepStringify({
_at: new Date().toJSON(),
_type: 'CWARN',
...routeNow(),
...expandArgs(args)
}))
globalThis.UniApp || console.log(',')
},
ccerror (...args) {
console.error(deepStringify({
_at: new Date().toJSON(),
_type: 'CERROR',
...routeNow(),
...expandArgs(args)
}))
globalThis.UniApp || console.log(',')
},
ccdebug (...args) {
if (process.env.NODE_ENV !== 'production') {
console.debug(deepStringify({
_at: new Date().toJSON(),
_type: 'CDEBUG',
...routeNow(),
...expandArgs(args)
}))
globalThis.UniApp || console.log(',')
}
}
}

8
coco-app.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
cclog () { },
ccinfo () { },
ccgood () { },
ccwarn () { },
ccerror () { },
ccdebug () { }
}

56
coco-browser.js Normal file
View File

@ -0,0 +1,56 @@
function routeNow () {
const pageNow = globalThis.getCurrentPages()[globalThis.getCurrentPages().length - 1]
return pageNow?.route || 'VueApp'
}
function deepStringify (args = []) {
return JSON.stringify(args, null, 2) // used in web browser console, to avoid clicking to expand by hand.
}
module.exports =
{
cclog (...args) {
console.log(
`%c ${new Date().toJSON()} [LOG] ${routeNow()}`,
'background: #808080; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
},
ccinfo (...args) {
console.info(
`%c ${new Date().toJSON()} [INFO] ${routeNow()}`,
'background: #0000ff; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
},
ccgood (...args) {
console.info(
`%c ${new Date().toJSON()} [GOOD] ${routeNow()}`,
'background: #2ecc71; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
},
ccwarn (...args) {
console.warn(
`%c ${new Date().toJSON()} [WARN] ${routeNow()}`,
'background: #f39c12; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
},
ccerror (...args) {
console.error(
`%c ${new Date().toJSON()} [ERROR] ${routeNow()}`,
'background: #c0392b; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
},
ccdebug (...args) {
if (process.env.NODE_ENV !== 'production') {
console.debug(
`%c ${new Date().toJSON()} [DEBUG] ${routeNow()}`,
'background: purple; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
deepStringify(args)
)
}
},
}

53
coco-nodejs.js Normal file
View File

@ -0,0 +1,53 @@
// colors only works in nodejs cli
// consola works in nodejs and browser
// chalk 和 colors 用法类似。
const util = require('util')
const colors = require('colors')
function deepInspect (args = [], colors = false) {
return args.map((arg) => util.inspect(arg, { showHidden: false, depth: null, colors })) // 如果用这个方案,在下面的方法里就要用 ...deepInspect(args) 否则会显示成一整字符串
}
module.exports =
{
// 后台服务器命令行。注意如果输出重定向到文件里,会有 ESC[34m2023-10-07T12:32:00.915ZESC[39m 这样的特殊标识。
// 在 pm2 里,为了防止特殊标志,可用 --no-color
cclog (...args) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[LOG]'), ...deepInspect(args, true))
},
ccinfo (...args) {
console.info(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[INFO]'), ...deepInspect(args, true))
},
ccgood (...args) {
console.info(colors.bgWhite(new Date().toJSON()), colors.bgGreen('[GOOD]'), ...deepInspect(args, true))
},
ccwarn (...args) {
// console.warn will appear in pm2's error log
console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow('[WARN]'), ...deepInspect(args, true))
},
ccerror (...args) {
// console.error will appear in pm2's error log
console.error(colors.bgWhite(new Date().toJSON()), colors.bgRed('[ERROR]'), ...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()), colors.rainbow('[DEBUG]'), ...deepInspect(args, true))
}
},
ccinput (headers, path, indata) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgCyan('[Headers]'), colors.cyan(headers))
console.info(colors.bgWhite(new Date().toJSON()), colors.bgBrightBlue(`[INDATA] ${path}`), colors.brightBlue(util.inspect(indata, { showHidden: false, depth: null, colors: false }))) // 已经被 colors.xxx 进行上色了
},
ccoutput (path, outdata) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgGreen(`[OUTDATA] ${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(`[EXCEPTION] ${path}`), colors.red(util.inspect(outdata, { showHidden: false, depth: null, colors: true })))
},
ccunknown (path) {
console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow(`[UNKNOWN] ${path}`), colors.yellow({ _state: 'WOBASE_API_UNKNOWN', response: 401 }))
}
}

31
coco-unicloud.js Normal file
View File

@ -0,0 +1,31 @@
function deepStringify (args = []) {
return JSON.stringify(args, null, 2) // used in web browser console, to avoid clicking to expand by hand.
}
module.exports = {
// HBuilder 内置环境的 云空间 console 不支持颜色。为了检查是否支持颜色,测试 uniCloud 是否存在不存在说明在自己的server环境里
// 或 require('supports-color'),相应的返回不同的函数。
cclog (...args) {
console.log(new Date().toJSON(), '[LOG]', deepStringify(args))
},
ccinfo (...args) {
console.info(new Date().toJSON(), '[INFO]', deepStringify(args))
},
ccgood (...args) {
console.info(new Date().toJSON(), '[GOOD]', deepStringify(args))
},
ccwarn (...args) {
// console.warn will appear in pm2's error log
console.warn(new Date().toJSON(), '[WARN]', deepStringify(args))
},
ccerror (...args) {
// console.error will appear in pm2's error log
console.error(new Date().toJSON(), '[ERROR]', deepStringify(args))
},
ccdebug (...args) {
if ('production' !== process.env.NODE_ENV) {
// 在server的测试环境下. 注意在 uniCloud 环境下,`process.env.NODE_ENV` 不存在. 如要应用本方法,需要手动设置 `process.env.NODE_ENV`
console.log(new Date().toJSON(), '[DEBUG]', deepStringify(args))
}
},
}

135
coco.js
View File

@ -2,135 +2,12 @@
// consola works in nodejs and browser
// chalk 和 colors 用法类似。
const util = require('util')
const colors = require('colors')
// in uniapp: globalThis.uni && globalThis.UniApp
// in vue: globalThis.getApp?.()?.constructor?.name === 'Vue'
function routeNow () {
const pageNow = globalThis.getCurrentPages()[globalThis.getCurrentPages().length - 1]
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()} [LOG] ${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()} [INFO] ${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()} [GOOD] ${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()} [WARN] ${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()} [ERROR] ${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()} [DEBUG] ${routeNow()}`,
'background: #ff0000; border-radius: 0.5em;color: white; font-weight: bold; padding: 2px 0.5em;',
...deepInspect(args)
)
}
},
}
: typeof uniCloud !== 'undefined'
? {
// uniCloud 云空间
// HBuilder 内置环境的 console 不支持颜色。为了检查是否支持颜色,测试 uniCloud 是否存在不存在说明在自己的server环境里
// 或 require('supports-color'),相应的返回不同的函数。
cclog (...args) {
console.log(new Date().toJSON(), '[LOG]', ...deepInspect(args))
},
ccinfo (...args) {
console.info(new Date().toJSON(), '[INFO]', ...deepInspect(args))
},
ccgood (...args) {
console.info(new Date().toJSON(), '[GOOD]', ...deepInspect(args))
},
ccwarn (...args) {
// console.warn will appear in pm2's error log
console.warn(new Date().toJSON(), '[WARN]', ...deepInspect(args))
},
ccerror (...args) {
// console.error will appear in pm2's error log
console.error(new Date().toJSON(), '[ERROR]', ...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(), '[DEBUG]', ...deepInspect(args))
}
},
}
: {
// 后台服务器命令行。注意如果输出重定向到文件里,会有 ESC[34m2023-10-07T12:32:00.915ZESC[39m 这样的特殊标识。
// 在 pm2 里,为了防止特殊标志,可用 --no-color
cclog (...args) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[LOG]'), ...deepInspect(args, true))
},
ccinfo (...args) {
console.info(colors.bgWhite(new Date().toJSON()), colors.bgBlue('[INFO]'), ...deepInspect(args, true))
},
ccgood (...args) {
console.info(colors.bgWhite(new Date().toJSON()), colors.bgGreen('[GOOD]'), ...deepInspect(args, true))
},
ccwarn (...args) {
// console.warn will appear in pm2's error log
console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow('[WARN]'), ...deepInspect(args, true))
},
ccerror (...args) {
// console.error will appear in pm2's error log
console.error(colors.bgWhite(new Date().toJSON()), colors.bgRed('[ERROR]'), ...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()), colors.rainbow('[DEBUG]'), ...deepInspect(args, true))
}
},
ccinput (headers, path, indata) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgCyan('[Headers]'), colors.cyan(headers))
console.info(colors.bgWhite(new Date().toJSON()), colors.bgBrightBlue(`[INDATA] ${path}`), colors.brightBlue(util.inspect(indata, { showHidden: false, depth: null, colors: false }))) // 已经被 colors.xxx 进行上色了
},
ccoutput (path, outdata) {
console.log(colors.bgWhite(new Date().toJSON()), colors.bgGreen(`[OUTDATA] ${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(`[EXCEPTION] ${path}`), colors.red(util.inspect(outdata, { showHidden: false, depth: null, colors: true })))
},
ccunknown (path) {
console.warn(colors.bgWhite(new Date().toJSON()), colors.bgYellow(`[UNKNOWN] ${path}`), colors.yellow({ _state: 'WOBASE_API_UNKNOWN', response: 401 }))
}
}
process?.release?.name === 'node' ? require('./coco-nodejs.js')
: globalThis.window && globalThis.location ? require('./coco-browser.js')
: globalThis.uniCloud ? require('./coco-unicloud.js')
: require('./coco-app.js')

View File

@ -2,7 +2,7 @@
"name": "wo-core-coco",
"version": "1.0.0",
"description": "",
"main": "coco.js",
"main": "cc.js",
"scripts": {},
"author": "",
"license": "ISC",