125 lines
2.9 KiB
JavaScript
125 lines
2.9 KiB
JavaScript
import winston, { format } 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 = winston.createLogger();
|
|
|
|
function configureTransports(options) {
|
|
const transports = [];
|
|
if (options) {
|
|
const silent = options.silent;
|
|
delete options.silent;
|
|
|
|
try {
|
|
if (!_.isNil(options.dirname)) {
|
|
const parseServer = new DailyRotateFile(
|
|
Object.assign(
|
|
{
|
|
filename: 'parse-server.info',
|
|
json: true,
|
|
format: format.combine(format.timestamp(), format.splat(), format.json()),
|
|
},
|
|
options
|
|
)
|
|
);
|
|
parseServer.name = 'parse-server';
|
|
transports.push(parseServer);
|
|
|
|
const parseServerError = new DailyRotateFile(
|
|
Object.assign(
|
|
{
|
|
filename: 'parse-server.err',
|
|
json: true,
|
|
format: format.combine(format.timestamp(), format.splat(), format.json()),
|
|
},
|
|
options,
|
|
{ level: 'error' }
|
|
)
|
|
);
|
|
parseServerError.name = 'parse-server-error';
|
|
transports.push(parseServerError);
|
|
}
|
|
} catch (e) {
|
|
/* */
|
|
}
|
|
|
|
const consoleFormat = options.json ? format.json() : format.simple();
|
|
const consoleOptions = Object.assign(
|
|
{
|
|
colorize: true,
|
|
name: 'console',
|
|
silent,
|
|
format: consoleFormat,
|
|
},
|
|
options
|
|
);
|
|
|
|
transports.push(new winston.transports.Console(consoleOptions));
|
|
}
|
|
|
|
logger.configure({
|
|
transports,
|
|
});
|
|
}
|
|
|
|
export function configureLogger({
|
|
logsFolder = defaults.logsFolder,
|
|
jsonLogs = defaults.jsonLogs,
|
|
logLevel = winston.level,
|
|
verbose = defaults.verbose,
|
|
silent = defaults.silent,
|
|
maxLogFiles,
|
|
} = {}) {
|
|
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 (e) {
|
|
/* */
|
|
}
|
|
}
|
|
options.dirname = logsFolder;
|
|
options.level = logLevel;
|
|
options.silent = silent;
|
|
options.maxFiles = maxLogFiles;
|
|
|
|
if (jsonLogs) {
|
|
options.json = true;
|
|
options.stringify = true;
|
|
}
|
|
configureTransports(options);
|
|
}
|
|
|
|
export function addTransport(transport) {
|
|
// we will remove the existing transport
|
|
// before replacing it with a new one
|
|
removeTransport(transport.name);
|
|
|
|
logger.add(transport);
|
|
}
|
|
|
|
export function removeTransport(transport) {
|
|
const matchingTransport = logger.transports.find(t1 => {
|
|
return typeof transport === 'string' ? t1.name === transport : t1 === transport;
|
|
});
|
|
|
|
if (matchingTransport) {
|
|
logger.remove(matchingTransport);
|
|
}
|
|
}
|
|
|
|
export { logger };
|
|
export default logger;
|