2016-08-12 13:25:24 -04:00
|
|
|
import winston from 'winston';
|
|
|
|
|
import fs from 'fs';
|
|
|
|
|
import path from 'path';
|
|
|
|
|
import DailyRotateFile from 'winston-daily-rotate-file';
|
|
|
|
|
import _ from 'lodash';
|
2018-09-01 13:58:06 -04:00
|
|
|
import defaults from '../../defaults';
|
2016-08-12 13:25:24 -04:00
|
|
|
|
|
|
|
|
const logger = new winston.Logger();
|
|
|
|
|
const additionalTransports = [];
|
|
|
|
|
|
|
|
|
|
function updateTransports(options) {
|
2016-12-07 15:17:05 -08:00
|
|
|
const transports = Object.assign({}, logger.transports);
|
2016-08-12 13:25:24 -04:00
|
|
|
if (options) {
|
2016-12-07 15:17:05 -08:00
|
|
|
const silent = options.silent;
|
2016-08-12 13:25:24 -04:00
|
|
|
delete options.silent;
|
|
|
|
|
if (_.isNull(options.dirname)) {
|
|
|
|
|
delete transports['parse-server'];
|
|
|
|
|
delete transports['parse-server-error'];
|
|
|
|
|
} else if (!_.isUndefined(options.dirname)) {
|
2018-09-01 13:58:06 -04:00
|
|
|
transports['parse-server'] = new DailyRotateFile(
|
|
|
|
|
Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
{
|
|
|
|
|
filename: 'parse-server.info',
|
|
|
|
|
name: 'parse-server',
|
|
|
|
|
},
|
|
|
|
|
options,
|
|
|
|
|
{ timestamp: true }
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
transports['parse-server-error'] = new DailyRotateFile(
|
|
|
|
|
Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
{
|
|
|
|
|
filename: 'parse-server.err',
|
|
|
|
|
name: 'parse-server-error',
|
|
|
|
|
},
|
|
|
|
|
options,
|
|
|
|
|
{ level: 'error', timestamp: true }
|
|
|
|
|
)
|
|
|
|
|
);
|
2016-08-12 13:25:24 -04:00
|
|
|
}
|
|
|
|
|
|
2018-09-01 13:58:06 -04:00
|
|
|
transports.console = new winston.transports.Console(
|
|
|
|
|
Object.assign(
|
|
|
|
|
{
|
|
|
|
|
colorize: true,
|
|
|
|
|
name: 'console',
|
|
|
|
|
silent,
|
|
|
|
|
},
|
|
|
|
|
options
|
|
|
|
|
)
|
|
|
|
|
);
|
2016-08-12 13:25:24 -04:00
|
|
|
}
|
|
|
|
|
// Mount the additional transports
|
2018-09-01 13:58:06 -04:00
|
|
|
additionalTransports.forEach(transport => {
|
2016-08-12 13:25:24 -04:00
|
|
|
transports[transport.name] = transport;
|
|
|
|
|
});
|
|
|
|
|
logger.configure({
|
2018-09-01 13:58:06 -04:00
|
|
|
transports: _.values(transports),
|
2016-08-12 13:25:24 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function configureLogger({
|
|
|
|
|
logsFolder = defaults.logsFolder,
|
|
|
|
|
jsonLogs = defaults.jsonLogs,
|
|
|
|
|
logLevel = winston.level,
|
|
|
|
|
verbose = defaults.verbose,
|
2018-09-01 13:58:06 -04:00
|
|
|
silent = defaults.silent,
|
|
|
|
|
} = {}) {
|
2016-08-12 13:25:24 -04:00
|
|
|
if (verbose) {
|
|
|
|
|
logLevel = 'verbose';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
winston.level = logLevel;
|
|
|
|
|
const options = {};
|
|
|
|
|
|
|
|
|
|
if (logsFolder) {
|
|
|
|
|
if (!path.isAbsolute(logsFolder)) {
|
|
|
|
|
logsFolder = path.resolve(process.cwd(), logsFolder);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
fs.mkdirSync(logsFolder);
|
2018-09-01 13:58:06 -04:00
|
|
|
} catch (e) {
|
|
|
|
|
/* */
|
|
|
|
|
}
|
2016-08-12 13:25:24 -04:00
|
|
|
}
|
|
|
|
|
options.dirname = logsFolder;
|
|
|
|
|
options.level = logLevel;
|
|
|
|
|
options.silent = silent;
|
|
|
|
|
|
|
|
|
|
if (jsonLogs) {
|
|
|
|
|
options.json = true;
|
|
|
|
|
options.stringify = true;
|
|
|
|
|
}
|
|
|
|
|
updateTransports(options);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function addTransport(transport) {
|
|
|
|
|
additionalTransports.push(transport);
|
|
|
|
|
updateTransports();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function removeTransport(transport) {
|
2018-09-01 13:58:06 -04:00
|
|
|
const transportName =
|
|
|
|
|
typeof transport == 'string' ? transport : transport.name;
|
2016-12-07 15:17:05 -08:00
|
|
|
const transports = Object.assign({}, logger.transports);
|
2016-08-12 13:25:24 -04:00
|
|
|
delete transports[transportName];
|
|
|
|
|
logger.configure({
|
2018-09-01 13:58:06 -04:00
|
|
|
transports: _.values(transports),
|
2016-08-12 13:25:24 -04:00
|
|
|
});
|
2018-09-01 13:58:06 -04:00
|
|
|
_.remove(additionalTransports, transport => {
|
2016-08-12 13:25:24 -04:00
|
|
|
return transport.name === transportName;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-24 15:25:22 -04:00
|
|
|
export { logger };
|
2016-08-12 13:25:24 -04:00
|
|
|
export default logger;
|