Allow logger to add transports (#2363)
- Move all of the winston logic from FileLoggerAdapter to WinstonLoggerAdapter - Export WinstonLoggerAdapter so it can be sublcassed - Expost the ability to add adittional transports to logger - Import FirehoseLoggerAdapter alongside other adapters so it can be configured.
This commit is contained in:
committed by
Florent Vilmart
parent
36891f4ed7
commit
fa736f1df7
@@ -6,7 +6,7 @@
|
||||
// * info(obj1 [, obj2, .., objN])
|
||||
// * error(obj1 [, obj2, .., objN])
|
||||
// * query(options, callback)
|
||||
// Default is FileLoggerAdapter.js
|
||||
// Default is WinstonLoggerAdapter.js
|
||||
|
||||
export class LoggerAdapter {
|
||||
info() {}
|
||||
|
||||
@@ -1,23 +1,9 @@
|
||||
// Logger
|
||||
//
|
||||
// Wrapper around Winston logging library with custom query
|
||||
//
|
||||
// expected log entry to be in the shape of:
|
||||
// {"level":"info","message":"Your Message","timestamp":"2016-02-04T05:59:27.412Z"}
|
||||
//
|
||||
import { LoggerAdapter } from './LoggerAdapter';
|
||||
import { Parse } from 'parse/node';
|
||||
import { logger, configure } from '../../logger';
|
||||
import { logger, addTransport } from '../../logger';
|
||||
|
||||
const MILLISECONDS_IN_A_DAY = 24 * 60 * 60 * 1000;
|
||||
const CACHE_TIME = 1000 * 60;
|
||||
|
||||
let LOGS_FOLDER = './logs/';
|
||||
|
||||
if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {
|
||||
LOGS_FOLDER = './test_logs/'
|
||||
}
|
||||
|
||||
let currentDate = new Date();
|
||||
|
||||
let simpleCache = {
|
||||
@@ -65,8 +51,7 @@ let _isValidLogEntry = (from, until, entry) => {
|
||||
: false
|
||||
};
|
||||
|
||||
export class FileLoggerAdapter extends LoggerAdapter {
|
||||
|
||||
export class WinstonLoggerAdapter extends LoggerAdapter {
|
||||
info() {
|
||||
return logger.info.apply(undefined, arguments);
|
||||
}
|
||||
@@ -75,6 +60,13 @@ export class FileLoggerAdapter extends LoggerAdapter {
|
||||
return logger.error.apply(undefined, arguments);
|
||||
}
|
||||
|
||||
addTransport(transport) {
|
||||
// Note that this is calling addTransport
|
||||
// from logger. See import - confusing.
|
||||
// but this is not recursive.
|
||||
addTransport(transport);
|
||||
}
|
||||
|
||||
// custom query as winston is currently limited
|
||||
query(options, callback = () => {}) {
|
||||
if (!options) {
|
||||
@@ -114,4 +106,4 @@ export class FileLoggerAdapter extends LoggerAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
export default FileLoggerAdapter;
|
||||
export default WinstonLoggerAdapter;
|
||||
@@ -28,7 +28,7 @@ import { InMemoryCacheAdapter } from './Adapters/Cache/InMemoryCacheAdapter';
|
||||
import { AnalyticsController } from './Controllers/AnalyticsController';
|
||||
import { CacheController } from './Controllers/CacheController';
|
||||
import { AnalyticsAdapter } from './Adapters/Analytics/AnalyticsAdapter';
|
||||
import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter';
|
||||
import { WinstonLoggerAdapter } from './Adapters/Logger/WinstonLoggerAdapter';
|
||||
import { FilesController } from './Controllers/FilesController';
|
||||
import { FilesRouter } from './Routers/FilesRouter';
|
||||
import { FunctionsRouter } from './Routers/FunctionsRouter';
|
||||
@@ -71,7 +71,7 @@ const requiredUserFields = { fields: { ...SchemaController.defaultColumns._Defau
|
||||
// "analyticsAdapter": an adapter class for analytics
|
||||
// "filesAdapter": a class like GridStoreAdapter providing create, get,
|
||||
// and delete
|
||||
// "loggerAdapter": a class like FileLoggerAdapter providing info, error,
|
||||
// "loggerAdapter": a class like WinstonLoggerAdapter providing info, error,
|
||||
// and query
|
||||
// "jsonLogs": log as structured JSON objects
|
||||
// "databaseURI": a uri like mongodb://localhost:27017/dbname to tell us
|
||||
@@ -186,7 +186,7 @@ class ParseServer {
|
||||
});
|
||||
// Pass the push options too as it works with the default
|
||||
const pushControllerAdapter = loadAdapter(push && push.adapter, ParsePushAdapter, push || {});
|
||||
const loggerControllerAdapter = loadAdapter(loggerAdapter, FileLoggerAdapter);
|
||||
const loggerControllerAdapter = loadAdapter(loggerAdapter, WinstonLoggerAdapter);
|
||||
const emailControllerAdapter = loadAdapter(emailAdapter);
|
||||
const cacheControllerAdapter = loadAdapter(cacheAdapter, InMemoryCacheAdapter, {appId: appId});
|
||||
const analyticsControllerAdapter = loadAdapter(analyticsAdapter, AnalyticsAdapter);
|
||||
|
||||
@@ -172,7 +172,7 @@ export default {
|
||||
},
|
||||
"customPages": {
|
||||
env: "PARSE_SERVER_CUSTOM_PAGES",
|
||||
help: "custom pages for pasword validation and reset",
|
||||
help: "custom pages for password validation and reset",
|
||||
action: objectParser
|
||||
},
|
||||
"maxUploadSize": {
|
||||
|
||||
@@ -13,6 +13,7 @@ LOGS_FOLDER = process.env.PARSE_SERVER_LOGS_FOLDER || LOGS_FOLDER;
|
||||
const JSON_LOGS = process.env.JSON_LOGS || false;
|
||||
|
||||
let currentLogsFolder = LOGS_FOLDER;
|
||||
const additionalTransports = [];
|
||||
|
||||
function generateTransports(level, options = {}) {
|
||||
let transports = [
|
||||
@@ -32,7 +33,7 @@ function generateTransports(level, options = {}) {
|
||||
level: 'error'
|
||||
}
|
||||
), options)
|
||||
];
|
||||
].concat(additionalTransports);
|
||||
if (!process.env.TESTING || process.env.VERBOSE) {
|
||||
transports = [
|
||||
new (winston.transports.Console)(
|
||||
@@ -90,5 +91,14 @@ export function addGroup(groupName) {
|
||||
return winston.loggers.get(groupName);
|
||||
}
|
||||
|
||||
export { logger };
|
||||
export function addTransport(transport) {
|
||||
const level = winston.level;
|
||||
additionalTransports.push(transport);
|
||||
const transports = generateTransports(level);
|
||||
logger.configure({
|
||||
transports: transports
|
||||
});
|
||||
}
|
||||
|
||||
export { logger, addTransport };
|
||||
export default logger;
|
||||
|
||||
Reference in New Issue
Block a user