CloudScrapy / utils / logger.js
logger.js
Raw
const winston = require('winston');
require('winston-mongodb');
const packageProject = require('../package.json');
const cloudScrapyVersion = packageProject.version
const config = require('config')
const mongoUri = config.get('mongodb.mongodb_uri')
const logsPath = config.get('paths.logs_path')


winston.addColors({ label: 'bold blueBG' });
winston.addColors({ timestamp: 'magenta' });
winston.addColors({ space: 'bold magentaBG' });
const colorizer = winston.format.colorize();

const logsColors = winston.format.printf(
    info => `${info.level}--->${colorizer.colorize('label', info.label)}--->${colorizer.colorize('timestamp', info.timestamp)}--->${info.message}`
)

const logsNoColors = winston.format.printf(
    info => `${info.level}--->${info.label}--->${[info.timestamp]}--->${info.message}`
)

const alignColorsAndTime = logsFormats => winston.format.combine(
    winston.format.label({
        label: `[CloudScrapy v${cloudScrapyVersion}]-[LOGGER]`,
    }),
    winston.format.timestamp({
        format: `DD-MM-YYYY-HH:MM:SS`,
    }),
    logsFormats
);


const fileNameTransport = filename => new winston.transports.File({
    level: 'silly',
    filename: `${logsPath}${filename}.log`,
    format: winston.format.combine(winston.format.json(), alignColorsAndTime(logsNoColors)),
});


const logger = function (filename) {
    if (filename !== "") {
        return winston.createLogger({
            level: 'silly',
            transports: [
                new (winston.transports.Console)({
                    format: winston.format.combine(winston.format.colorize({all: true}), alignColorsAndTime(logsColors)),
                }),
                fileNameTransport(filename),
                new (winston.transports.MongoDB)({
                    options: {
                        useNewUrlParser: true,
                        useUnifiedTopology: true,
                    },
                    autoReconnect: true,
                    level: 'silly',
                    db: mongoUri,
                    collection: 'logs_general',
                    format: winston.format.combine(alignColorsAndTime(logsColors))
                }),
            ]
        });
    } else {
        return winston.createLogger({
            level: 'silly',
            transports: [
                new (winston.transports.Console)({
                    format: winston.format.combine(winston.format.colorize({all: true}), alignColorsAndTime(logsColors)),
                }),
                new (winston.transports.MongoDB)({
                    autoReconnect: true,
                    options: {
                        useNewUrlParser: true,
                        useUnifiedTopology: true,
                    },
                    level: 'silly',
                    db: mongoUri,
                    collection: 'logs_general',
                    format: winston.format.combine(alignColorsAndTime(logsColors))
                }),
            ]
        });
    }
}





module.exports = logger;