Refactor logging to provide common logger from LoggerAdapter (#2478)
* Refactor logging to provide common logger from LoggerAdapter Move logger logic de WinstonLoggerAdapter Further improvements in configuration Use logger instead of getLogger - Removes PLog module Reverts name changes nits * Adds additional logging levels as requirements * Adds tests for logging configuration * removes flaky test * investigate... * further investigation * Adds silent option to disable console output * Restores logs with VERBOSE in tests * Expose controller instead of adapter, reduces method requirements for adapter * Shuffles initializations around * Fix doc * Load cloudCode last to make sure the logger is available * Adds test to make sure we can load an adapter from npm module * extract defaults * Adds defaultMongoURI to defaults * fix defaults values * Proper error for PG failures * Disable flaky test
This commit is contained in:
100
src/Adapters/Logger/WinstonLogger.js
Normal file
100
src/Adapters/Logger/WinstonLogger.js
Normal file
@@ -0,0 +1,100 @@
|
||||
import winston from 'winston';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import DailyRotateFile from 'winston-daily-rotate-file';
|
||||
import _ from 'lodash';
|
||||
import defaults from '../../defaults';
|
||||
|
||||
const logger = new winston.Logger();
|
||||
const additionalTransports = [];
|
||||
|
||||
function updateTransports(options) {
|
||||
let transports = Object.assign({}, logger.transports);
|
||||
if (options) {
|
||||
let silent = options.silent;
|
||||
delete options.silent;
|
||||
if (_.isNull(options.dirname)) {
|
||||
delete transports['parse-server'];
|
||||
delete transports['parse-server-error'];
|
||||
} else if (!_.isUndefined(options.dirname)) {
|
||||
transports['parse-server'] = new (DailyRotateFile)(
|
||||
Object.assign({
|
||||
filename: 'parse-server.info',
|
||||
name: 'parse-server',
|
||||
}, options));
|
||||
transports['parse-server-error'] = new (DailyRotateFile)(
|
||||
Object.assign({
|
||||
filename: 'parse-server.err',
|
||||
name: 'parse-server-error',
|
||||
level: 'error'
|
||||
}, options));
|
||||
}
|
||||
|
||||
transports.console = new (winston.transports.Console)(
|
||||
Object.assign({
|
||||
colorize: true,
|
||||
name: 'console',
|
||||
silent
|
||||
}, options));
|
||||
}
|
||||
// Mount the additional transports
|
||||
additionalTransports.forEach((transport) => {
|
||||
transports[transport.name] = transport;
|
||||
});
|
||||
logger.configure({
|
||||
transports: _.values(transports)
|
||||
});
|
||||
}
|
||||
|
||||
export function configureLogger({
|
||||
logsFolder = defaults.logsFolder,
|
||||
jsonLogs = defaults.jsonLogs,
|
||||
logLevel = winston.level,
|
||||
verbose = defaults.verbose,
|
||||
silent = defaults.silent } = {}) {
|
||||
|
||||
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);
|
||||
} catch (exception) {}
|
||||
}
|
||||
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) {
|
||||
let transportName = typeof transport == 'string' ? transport : transport.name;
|
||||
let transports = Object.assign({}, logger.transports);
|
||||
delete transports[transportName];
|
||||
logger.configure({
|
||||
transports: _.values(transports)
|
||||
});
|
||||
_.remove(additionalTransports, (transport) => {
|
||||
return transport.name === transportName;
|
||||
});
|
||||
}
|
||||
|
||||
export { logger, addTransport, configureLogger, removeTransport };
|
||||
export default logger;
|
||||
Reference in New Issue
Block a user