added
.default value, .clear method (does nothing yet) .div method adds a divider using console log but only on output to console. .lvlset a method to set the level that doesn't get called if logging is disabled which turns on logging. wrapped all the prelim stuff in enabled valued so it doesn't get called with logger is disabled.master
parent
6a0b07dd40
commit
72adfffbeb
|
@ -7,23 +7,24 @@ class LogTest {
|
|||
// pretty: {translateTime:true, colorize:true, levelFirst:true } // options for pino pretty printer
|
||||
// env:'', // 'dev' or 'pro' -- can be use to set/override UCI_ENV environment variable
|
||||
// enForce: false, // only used with .evn. if true will override UCI_ENV if it is set, otherwise no
|
||||
// level:'info', // info is default level, set level to lowest visible
|
||||
// level:'debug', // info is default level, set level to lowest visible
|
||||
// clear: false, // true for log files will clear the current log file on restart
|
||||
// logFileName:'test', // if not supplied log filename will be generated from timestamp
|
||||
// below properties are optional and are passed to child logger instance and will be part of json log entry
|
||||
// below are BASE properties which are optional and are passed to child logger instance and will be part of json log entry
|
||||
// libraryName: 'UCI', // will be logged as name: can be used to identify logs of related packages, can be set via UCI_LOG_NAME env variable
|
||||
appName:'uci-example-logger', //will be used for logging directory name if supplied and will be logged as well
|
||||
package: '@uci/logger', // name of package with scope per package.json
|
||||
package: '@uci/test', // name of package with scope per package.json
|
||||
// repo: // will use scope-name from package prop if not supplied
|
||||
id: opts.id, // can pass a unique if for easy later search/filtering
|
||||
// file: 'example/example.js', // path (to repo root) of actual file running this logger, default is ./src/<package without scope>.js
|
||||
class: 'LogTest', // The class that created this logger if any
|
||||
// one can pass through additional props to log for every log
|
||||
// should not use any keys above or
|
||||
// level,time,msg,pid,hostname
|
||||
// logPath,instanceCreatedHR,instanceCreated as keys will be merged
|
||||
// NOTE: more props can be added at run time by passing an object of props
|
||||
additional: {anotherprop:'test'} // should do not use any keys above or 'level,logPath,package,instanceCreatedHR,instanceCreated' as keys will be merged
|
||||
// class: 'LogTest', // The class that created this logger if any
|
||||
|
||||
/*----------------
|
||||
Can pass through additional props for every log by including this `additional` property object
|
||||
should not use any keys above or level,time,msg,pid,hostname,
|
||||
logPath,instanceCreatedHR,instanceCreated as keys in this object will be merged
|
||||
------------------*/
|
||||
// additional: {anotherprop:'test'}
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -34,11 +35,17 @@ class LogTest {
|
|||
log.warn('this is a warn level logged message')
|
||||
log.error('this is a error level logged message')
|
||||
log.fatal('this is a fatal level logged message')
|
||||
log.clear('This would clear the log')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let test = new LogTest({id:'logtest-via-new'})
|
||||
|
||||
log.div(`the default log level based on option or UCI_LOG_LEVEL ${log.default}`)
|
||||
test.logit()
|
||||
log.lvlset('fatal')
|
||||
log.div(`now changing log level manually in code to ${log.level}`)
|
||||
test.logit()
|
||||
log.div(`reset level back current default ${log.default}`)
|
||||
log.lvlset()
|
||||
test.logit()
|
||||
log.clear('This call to log.clear could clear the file log when implemented')
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
`# uCOMmandIt JSON Logger
|
||||
# uCOMmandIt JSON Logger
|
||||
|
||||
### json logger based on pino.
|
||||
### json logger based on [pino](getpino.io).
|
||||
|
||||
## How to by Example
|
||||
|
||||
|
|
|
@ -5,32 +5,31 @@ import { dirname, basename } from 'path'
|
|||
|
||||
function child (opts) {
|
||||
|
||||
if (opts.env) (opts.envForce) ? (process.env.UCI_ENV = opts.env) : (process.env.UCI_ENV = process.env.UCI_ENV || opts.env)
|
||||
const enabled = !!process.env.UCI_ENV
|
||||
|
||||
if (process.env.UCI_ENV === 'node') process.env.UCI_ENV = process.env.NODE_ENV
|
||||
let pretty = false; let LOG_PATH; let DATE_TIME
|
||||
|
||||
let pretty = false
|
||||
if(process.env.UCI_ENV === 'dev' || process.env.UCI_ENV === 'development') {
|
||||
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
|
||||
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 }
|
||||
}
|
||||
}
|
||||
|
||||
const DATE_TIME = new Date(Date.now()).toISOString().replace( /[:.]+/g, '-' )
|
||||
|
||||
const LOG_PATH = (process.env.UCI_ENV=== 'production' || process.env.UCI_ENV=== 'pro' || process.env.UCI_ENV=== 'logfile' )
|
||||
? ( process.env.UCI_LOG_PATH || `${envPaths(opts.appName || opts.name || 'default').log}/${opts.logFileName || DATE_TIME}.log`) : null
|
||||
|
||||
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: !!process.env.UCI_ENV,
|
||||
enabled: enabled,
|
||||
safe: true,
|
||||
serializers: {
|
||||
req: pino.stdSerializers.req,
|
||||
|
@ -42,16 +41,14 @@ function child (opts) {
|
|||
LOG_PATH
|
||||
)
|
||||
|
||||
logger.clear = value => {console.log(value)}
|
||||
|
||||
let logOpts = {
|
||||
level:opts.level,
|
||||
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, '-' ) : null,
|
||||
repo: opts.repo || (opts.package) ? opts.package.replace( /[@]+/g, '' ).replace( /[/]+/g, '-' ) : undefined,
|
||||
package: opts.package,
|
||||
file: opts.file || `src/${basename(opts.package)}.js`,
|
||||
class: opts.class || (opts.name.charAt(0).toUpperCase() + opts.name.slice(1)),
|
||||
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()
|
||||
|
@ -59,7 +56,20 @@ function child (opts) {
|
|||
|
||||
logOpts = Object.assign(logOpts,opts.additional)
|
||||
|
||||
return logger.child(logOpts)
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue