dev-sidecar/packages/core/src/utils/util.log-or-console.js

90 lines
1.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

const dateUtil = require('./util.date')
let log = console
// 将console中的日志缓存起来当setLogger时将控制台的日志写入日志文件
let backupLogs = []
function backup (fun, args) {
if (backupLogs === null) {
return
}
try {
backupLogs.push({
fun,
args,
time: dateUtil.format(new Date()),
})
// 最多缓存 100 条
if (backupLogs.length > 100) {
backupLogs = backupLogs.slice(1)
}
} catch {
}
}
function printBackups () {
if (backupLogs === null || log === console) {
return
}
try {
const backups = backupLogs
backupLogs = null // 先置空历史消息对象,再记录日志
for (const item of backups) {
log[item.fun](...[`[${item.time}] console -`, ...item.args])
}
} catch {
}
}
function _doLog (fun, args) {
if (log === console) {
log[fun](...[`[${fun.toUpperCase()}]`, ...args])
backup(fun, args) // 控制台日志备份起来
} else {
log[fun](...args)
}
}
module.exports = {
setLogger (logger) {
if (logger == null) {
log.error('logger 不能为空')
return
}
if (logger === log) {
return
}
log = logger
if (log !== console) {
try {
if (backupLogs && backupLogs.length > 0) {
log.info('[util.log-or-console.js] 日志系统已初始化完成,现开始将历史控制台信息记录到日志文件中:')
printBackups()
}
} catch {
}
}
},
debug (...args) {
_doLog('debug', args)
},
info (...args) {
_doLog('info', args)
},
warn (...args) {
_doLog('warn', args)
},
error (...args) {
_doLog('error', args)
},
}