skypager-project
Version:
skypager project framework
128 lines (109 loc) • 3.72 kB
JavaScript
import { Logger, transports } from 'winston'
import partial from 'lodash/partial'
export function use(options = {}, context = {}, next) {
const { project = this } = context
if (project.logger) {
next && next()
} else {
attach.call(this, options, context)
next && next()
}
}
export function attach(options = {}, context = {}) {
const { project = this } = context
const {
debug = !!project.get('environment.DEBUG', !!project.get('argv.debug', false)),
enableConsole = !!(project.get('environment.SKYPAGER_CONSOLE_LOGGING', project.get('argv.enableConsole', false))),
logPath = project.get('argv.logPath', project.resolve(project.paths.logs)),
name = project.getOption('logName', project.get('environment.SKYPAGER_LOG_NAME', 'project')),
timestamp = !!project.get('argv.logTimestamps', true),
json = !!(project.get('environment.SKYPAGER_JSON_LOGGING', project.get('argv.jsonLogging', false))),
prettyPrint = !!(project.get('environment.SKYPAGER_PRETTY_LOGGING', project.get('argv.prettyLogging', true))),
streamLogs = project.getOption('streamLogs', project.get('argv.streamLogs', project.get('environment.SKYPAGER_STREAM_LOGS', false))),
} = options
let _transports = [
new transports.File({
name,
filename: project.resolve(logPath, `${name}.${project.env}.log`),
timestamp,
json,
prettyPrint,
maxSize: 1024
})
]
if (enableConsole) {
_transports.push(
new transports.Console({
name: 'console',
colorize: true,
prettyprint,
level: debug ? 'debug' : 'info'
})
)
}
project.hide(
'logger',
new Logger({ level: 'debug', transports: _transports }),
true
)
if(streamLogs) {
project.hide(
'streamer',
new Logger({ level: 'debug', transports: [
new transports.File({
name: `json`,
filename: project.resolve(logPath, `${project.env}-${project.name}.json.log`),
timestamp,
json,
prettyPrint,
}),
new transports.File({
name: `pretty-json-stream`,
filename: project.resolve(logPath, `${project.env}-${project.name}.pretty.json.log`),
timestamp: true,
json: true,
prettyPrint: true,
colorize: true,
})
]}),
true
)
}
project.lazy('ensureLogsDir', () => project.mkdirpSync(logPath))
project.hide('info', (...args) => {
project.ensureLogsDir
project.logger.info(...args)
streamLogs && project.streamInfo(...args)
})
project.hide('error', (...args) => {
project.ensureLogsDir
project.logger.error(...args)
streamLogs && project.streamError(...args)
})
project.hide('debug', (...args) => {
project.ensureLogsDir
project.logger.debug(...args)
streamLogs && project.streamDebug(...args)
})
project.hide('log', (...args) => {
project.ensureLogsDir
project.logger.info(...args)
streamLogs && project.streamDebug(...args)
})
project.hide('warn', (...args) => {
project.ensureLogsDir
project.logger.warn(...args)
streamLogs && project.streamWarning(...args)
})
if (streamLogs) {
project.ensureLogsDir
project.hide('streamInfo', (...args) => project.streamer.info(...args))
project.hide('streamDebug', (...args) => project.streamer.debug(...args))
project.hide('streamLog', (...args) => project.streamer.log(...args))
project.hide('streamError', (...args) => project.streamer.error(...args))
project.hide('streamWarning', (...args) => project.streamer.warn(...args))
}
return project
}
export default attach
const { assign, defineProperty } = Object