@waiting/log
Version:
Lightweight logging for browser
98 lines (95 loc) • 2.96 kB
JavaScript
import { defaultConfig } from './config'
import { localSave } from './localstorage'
import { logger } from './logger'
import { LogLevel } from './model'
import { isSuppressLogLevel, setMaxMsgLength, setPersist, setPersistTTL, setRunLevel, setStoragePrefix, validateLogLevel, } from './util'
export function trace(data, persist) {
return proxy('trace', data, persist)
}
export function debug(data, persist) {
return proxy('debug', data, persist)
}
export function log(data, persist) {
return proxy('log', data, persist)
}
export function info(data, persist) {
return proxy('info', data, persist)
}
export function warn(data, persist) {
return proxy('warn', data, persist)
}
export function error(data, persist) {
return proxy('error', data, persist)
}
export function silent(data, persist) {
return proxy('silent', data, persist)
}
/** Get copy of defaultConfig */
export function getConfig() {
return Object.assign({}, defaultConfig)
}
/** Set value of key of defaultConfig and return copy of defaultConfig */
export function setConfig(config) {
if (config && typeof config === 'object') {
for (const [key, value] of Object.entries(config)) {
switch (key) {
case 'maxMsgLength':
setMaxMsgLength(value)
break
case 'persist':
setPersist(value)
break
case 'persistTTL':
setPersistTTL(value)
break
case 'runLevel':
setRunLevel(value)
break
case 'storagePrefix':
setStoragePrefix(value)
break
/* istanbul ignore next */
default:
info(`setConfig(config): value of param invalid: key "${key}"/value "${value}"`)
break
}
}
}
else {
info(`setConfig(config): value of param invalid: "${config}"`)
}
return getConfig()
}
export function getAvailableLogLevel() {
const ret = []
Object.keys(LogLevel).forEach(key => {
if (key && typeof key === 'string' && Number.isNaN(+key)) {
try {
validateLogLevel(key)
ret.push(key)
}
catch (ex) {
// void
}
}
})
return ret
}
/**
* @returns void or key of LocalStorage Item (if persist true)
*/
function proxy(level, data, persist) {
/* istanbul ignore else */
if (isSuppressLogLevel(defaultConfig.runLevel, level)) {
return
}
/* istanbul ignore else */
if (level === 'silent') {
return
}
logger(level, data)
const persistNew = typeof persist === 'boolean' ? persist : defaultConfig.persist
if (persistNew) {
localSave(level, data, defaultConfig.storagePrefix, defaultConfig.maxMsgLength)
}
}