uci-utils-logger/src/logger.js

76 lines
2.8 KiB
JavaScript

import pino from 'pino'
import envPaths from 'env-paths'
import { sync as mkdir } from 'make-dir'
import { dirname, basename } from 'path'
function child (opts) {
const enabled = !!process.env.UCI_ENV
let pretty = false; let LOG_PATH; let DATE_TIME
if (enabled) {
if (opts.env) (opts.envForce) ? (process.env.UCI_ENV = opts.env) : (process.env.UCI_ENV = process.env.UCI_ENV || opts.env)
if (process.env.UCI_ENV === 'node') process.env.UCI_ENV = process.env.NODE_ENV
if(process.env.UCI_ENV.indexOf('dev')>-1) {
if (process.env.UCI_LOG_JSON !=='true') {
pretty = process.env.UCI_LOG_PRETTY || opts.pretty || {translateTime:true, colorize:true, levelFirst:true }
pretty.search = process.env.UCI_LOG_SEARCH
}
}
DATE_TIME = new Date(Date.now()).toISOString().replace( /[:.]+/g, '-' )
LOG_PATH = ( process.env.UCI_ENV.indexOf('pro') > -1 || process.env.UCI_ENV === 'logfile' )
? ( process.env.UCI_LOG_PATH || `${envPaths(opts.appName || opts.name || 'default').log}/${opts.logFileName || DATE_TIME}.log`) : undefined
if (LOG_PATH) {
try { mkdir(dirname(LOG_PATH)) }
catch(err) { throw err }
}
}
// console.log('making logger (env,json,pretty,pretty-search,path)',process.env.UCI_ENV,process.env.UCI_LOG_JSON,pretty,process.env.UCI_LOG_SEARCH,LOG_PATH)
const logger = pino({
name: opts.libraryName || process.env.UCI_LOG_NAME || 'UCI',
enabled: enabled,
safe: true,
serializers: {
req: pino.stdSerializers.req,
res: pino.stdSerializers.res
},
prettyPrint: pretty
},
// if production not enabled then LOG_PATH is empty and logs go to stdout/stderr and can be piped from there
LOG_PATH
)
let logOpts = {
level:opts.level || process.env.UCI_LOG_LEVEL,
logPath: LOG_PATH, // if logging to file
appName: opts.appName,
repo: opts.repo || (opts.package) ? opts.package.replace( /[@]+/g, '' ).replace( /[/]+/g, '-' ) : undefined,
package: opts.package,
file: opts.file || (opts.package) ? `src/${basename(opts.package)}.js` : undefined,
class: opts.class || (opts.package) ? (basename(opts.package).charAt(0).toUpperCase() + opts.package.slice(1)) : undefined,
id: opts.id || opts.name || 'none',
instanceCreatedHR:DATE_TIME,
instanceCreated:new Date().getTime()
}
logOpts = Object.assign(logOpts,opts.additional)
let child = logger.child(logOpts)
child.default = opts.level || process.env.UCI_LOG_LEVEL
child.clear = () => {
if (enabled) {
if (process.env.UCI_ENV.indexOf('pro') > -1) return null } // enable feature here
}
child.div = value => {
if (enabled) {
if (process.env.UCI_ENV.indexOf('dev') > -1) console.log(`===== ${value} ========`)}
}
child.lvlset = (level) => { if (enabled) child.level = level || child.default || 'info' }
return child
}
export default child