UNPKG

nopalm

Version:

One stop graphical solution to create and manage your local Node.Js projects end to end.

74 lines (59 loc) 2.04 kB
import path from 'path'; import { PassThrough } from 'stream'; import { transports, format, createLogger } from 'winston'; const { Console, File } = transports; const TEN_MB = 10485760; const logFileName = 'nopalm.log'; const TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS ZZ'; const loggerStream = new PassThrough({ objectMode: true }); /** * constructs a lambda for the given log level which writes messages to the loggerStream * * @param {string} level - log level * @param {Stream} loggerStream - native node stream object to write messages to * * @returns {Function} - lambda function that writes to the streamer */ function wrapStreamer(level, loggerStream) { return (message, ...splat) => loggerStream.push({ level, message, [Symbol.for('splat')]: splat }); } function loggerInit(logLevel) { global.logger = { info: wrapStreamer('info', loggerStream), error: wrapStreamer('error', loggerStream), warn: wrapStreamer('warn', loggerStream), debug: wrapStreamer('debug', loggerStream) }; global.__debug = (filename, ...args) => logger.debug('(\x1b[34m%s\x1b[0m) \x1b[31m%s\x1b[0m', path.basename(filename), ...args); const transports = [ new Console({ format: format.combine( format.splat(), format.printf(info => info.stack || info.message) ), stderrLevels: ['error', 'warn'], colorize: true, level: logLevel }), new File({ filename: path.join(process.cwd(), 'log', logFileName), format: format.combine( format.splat(), format.timestamp({ format: TIMESTAMP_FORMAT }), format.printf(info => `${info.timestamp} [${info.level}] ${info.stack || info.message}`) ), maxsize: TEN_MB, maxFiles: 1, level: 'debug', tailable: true }) ]; const internalLogger = createLogger({ format: format.errors({ stack: true }), transports, exceptionHandlers: transports, exitOnError: true }); loggerStream.pipe(internalLogger); } export default loggerInit;