Skip to content

Commit 50bd455

Browse files
committed
Refactor logging to provide common logger from LoggerAdapter
1 parent 39078e8 commit 50bd455

23 files changed

+106
-64
lines changed

spec/Logger.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var logger = require('../src/logger');
1+
var logging = require('../src/logging');
22
var winston = require('winston');
33

44
class TestTransport extends winston.Transport {
@@ -11,8 +11,8 @@ describe('Logger', () => {
1111
it('should add transport', () => {
1212
const testTransport = new (TestTransport)({});
1313
spyOn(testTransport, 'log');
14-
logger.addTransport(testTransport);
15-
logger.logger.info('hi');
14+
logging.addTransport(testTransport);
15+
logging.logger.info('hi');
1616
expect(testTransport.log).toHaveBeenCalled();
1717
});
1818
});

spec/helper.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,6 @@ global.fit_exclude_dbs = excluded => {
342342
}
343343
}
344344

345-
// LiveQuery test setting
346-
require('../src/LiveQuery/PLog').logLevel = 'NONE';
347345
var libraryCache = {};
348346
jasmine.mockLibrary = function(library, name, mock) {
349347
var original = require(library)[name];

src/Adapters/Logger/LoggerAdapter.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
// * info(obj1 [, obj2, .., objN])
77
// * error(obj1 [, obj2, .., objN])
88
// * query(options, callback)
9+
// * get logger()
10+
// * configureLogger(options)
911
// Default is WinstonLoggerAdapter.js
1012

1113
export class LoggerAdapter {
1214
info() {}
1315
error() {}
1416
query(options, callback) {}
17+
configureLogger(options) {}
1518
}
1619

1720
export default LoggerAdapter;

src/logger.js renamed to src/Adapters/Logger/WinstonLogger.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,5 @@ export function addTransport(transport) {
100100
});
101101
}
102102

103-
export { logger, addTransport };
103+
export { logger, addTransport, configureLogger };
104104
export default logger;

src/Adapters/Logger/WinstonLoggerAdapter.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { LoggerAdapter } from './LoggerAdapter';
2-
import { logger, addTransport } from '../../logger';
2+
import { logger, addTransport, configureLogger } from './WinstonLogger';
33

44
const MILLISECONDS_IN_A_DAY = 24 * 60 * 60 * 1000;
55
const CACHE_TIME = 1000 * 60;
@@ -60,6 +60,14 @@ export class WinstonLoggerAdapter extends LoggerAdapter {
6060
return logger.error.apply(undefined, arguments);
6161
}
6262

63+
get logger() {
64+
return logger;
65+
}
66+
67+
configureLogger(options) {
68+
configureLogger(options);
69+
}
70+
6371
addTransport(transport) {
6472
// Note that this is calling addTransport
6573
// from logger. See import - confusing.

src/Adapters/Storage/Mongo/MongoTransform.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import log from '../../../logger';
1+
import log from '../../../logging';
22
import _ from 'lodash';
33
var mongodb = require('mongodb');
44
var Parse = require('parse/node').Parse;

src/Controllers/HooksController.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as DatabaseAdapter from "../DatabaseAdapter";
44
import * as triggers from "../triggers";
55
import * as Parse from "parse/node";
66
import * as request from "request";
7-
import { logger } from '../logger';
7+
import log from '../logging';
88

99
const DefaultHooksCollectionName = "_Hooks";
1010

@@ -181,7 +181,7 @@ function wrapToHTTPRequest(hook, key) {
181181
if (key) {
182182
jsonRequest.headers['X-Parse-Webhook-Key'] = key;
183183
} else {
184-
logger.warn('Making outgoing webhook request without webhookKey being set!');
184+
log.logger.warn('Making outgoing webhook request without webhookKey being set!');
185185
}
186186

187187
request.post(hook.url, jsonRequest, function (err, httpResponse, body) {

src/LiveQuery/Client.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import PLog from './PLog';
21
import Parse from 'parse/node';
2+
import log from '../logging';
33

44
import type { FlattenedObjectData } from './Subscription';
55
export type Message = { [attr: string]: any };
@@ -37,7 +37,7 @@ class Client {
3737
}
3838

3939
static pushResponse(parseWebSocket: any, message: Message): void {
40-
PLog.verbose('Push Response : %j', message);
40+
log.logger.verbose('Push Response : %j', message);
4141
parseWebSocket.send(message);
4242
}
4343

src/LiveQuery/PLog.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
1-
import { addGroup } from '../logger';
2-
3-
let PLog = addGroup('parse-live-query-server');
4-
5-
module.exports = PLog;
1+
import log from '../logging';
2+
module.exports = log.logger;

src/LiveQuery/ParseCloudCodePublisher.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ParsePubSub } from './ParsePubSub';
2-
import PLog from './PLog';
2+
import log from '../logging';
33

44
class ParseCloudCodePublisher {
55
parsePublisher: Object;
@@ -20,7 +20,7 @@ class ParseCloudCodePublisher {
2020

2121
// Request is the request object from cloud code functions. request.object is a ParseObject.
2222
_onCloudCodeMessage(type: string, request: any): void {
23-
PLog.verbose('Raw request from cloud code current : %j | original : %j', request.object, request.original);
23+
log.logger.verbose('Raw request from cloud code current : %j | original : %j', request.object, request.original);
2424
// We need the full JSON which includes className
2525
let message = {
2626
currentParseObject: request.object._toFullJSON()

src/LiveQuery/ParseWebSocketServer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import PLog from './PLog';
1+
import log from '../logging';
22

33
let typeMap = new Map([['disconnect', 'close']]);
44

@@ -9,7 +9,7 @@ export class ParseWebSocketServer {
99
let WebSocketServer = require('ws').Server;
1010
let wss = new WebSocketServer({ server: server });
1111
wss.on('listening', () => {
12-
PLog.log('Parse LiveQuery Server starts running');
12+
log.logger.info('Parse LiveQuery Server starts running');
1313
});
1414
wss.on('connection', (ws) => {
1515
onConnect(new ParseWebSocket(ws));

src/LiveQuery/SessionTokenCache.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Parse from 'parse/node';
22
import LRU from 'lru-cache';
3-
import PLog from './PLog';
3+
import log from '../logging';
44

55
class SessionTokenCache {
66
cache: Object;
@@ -18,16 +18,16 @@ class SessionTokenCache {
1818
}
1919
let userId = this.cache.get(sessionToken);
2020
if (userId) {
21-
PLog.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
21+
log.logger.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
2222
return Parse.Promise.as(userId);
2323
}
2424
return Parse.User.become(sessionToken).then((user) => {
25-
PLog.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
25+
log.logger.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
2626
let userId = user.id;
2727
this.cache.set(sessionToken, userId);
2828
return Parse.Promise.as(userId);
2929
}, (error) => {
30-
PLog.error('Can not fetch userId for sessionToken %j, error %j', sessionToken, error);
30+
log.logger.error('Can not fetch userId for sessionToken %j, error %j', sessionToken, error);
3131
return Parse.Promise.error(error);
3232
});
3333
}

src/LiveQuery/Subscription.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {matchesQuery, queryHash} from './QueryTools';
2-
import PLog from './PLog';
2+
import log from '../logging';
33

44
export type FlattenedObjectData = { [attr: string]: any };
55
export type QueryData = { [attr: string]: any };
@@ -29,13 +29,13 @@ class Subscription {
2929
deleteClientSubscription(clientId: number, requestId: number): void {
3030
let requestIds = this.clientRequestIds.get(clientId);
3131
if (typeof requestIds === 'undefined') {
32-
PLog.error('Can not find client %d to delete', clientId);
32+
log.logger.error('Can not find client %d to delete', clientId);
3333
return;
3434
}
3535

3636
let index = requestIds.indexOf(requestId);
3737
if (index < 0) {
38-
PLog.error('Can not find client %d subscription %d to delete', clientId, requestId);
38+
log.logger.error('Can not find client %d subscription %d to delete', clientId, requestId);
3939
return;
4040
}
4141
requestIds.splice(index, 1);

src/ParseServer.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ if (!global._babelPolyfill) {
1414
require('babel-polyfill');
1515
}
1616

17-
import { logger,
18-
configureLogger } from './logger';
17+
import log from './logging';
1918
import AppCache from './cache';
2019
import Config from './Config';
2120
import parseServerPackage from '../package.json';
@@ -162,9 +161,7 @@ class ParseServer {
162161
throw 'When using an explicit database adapter, you must also use and explicit filesAdapter.';
163162
}
164163

165-
if (logsFolder) {
166-
configureLogger({logsFolder, jsonLogs});
167-
}
164+
168165

169166
if (cloud) {
170167
addParseCloud();
@@ -177,16 +174,22 @@ class ParseServer {
177174
}
178175
}
179176

180-
if (verbose || process.env.VERBOSE || process.env.VERBOSE_PARSE_SERVER) {
181-
configureLogger({level: 'silly', jsonLogs});
182-
}
183-
184177
const filesControllerAdapter = loadAdapter(filesAdapter, () => {
185178
return new GridStoreAdapter(databaseURI);
186179
});
187180
// Pass the push options too as it works with the default
188181
const pushControllerAdapter = loadAdapter(push && push.adapter, ParsePushAdapter, push || {});
182+
189183
const loggerControllerAdapter = loadAdapter(loggerAdapter, WinstonLoggerAdapter);
184+
185+
log.setLogger(loggerControllerAdapter.logger);
186+
if (logsFolder) {
187+
loggerControllerAdapter.configureLogger({logsFolder, jsonLogs});
188+
}
189+
if (verbose || process.env.VERBOSE || process.env.VERBOSE_PARSE_SERVER) {
190+
loggerControllerAdapter.configureLogger({level: 'silly', jsonLogs});
191+
}
192+
190193
const emailControllerAdapter = loadAdapter(emailAdapter);
191194
const cacheControllerAdapter = loadAdapter(cacheAdapter, InMemoryCacheAdapter, {appId: appId});
192195
const analyticsControllerAdapter = loadAdapter(analyticsAdapter, AnalyticsAdapter);
@@ -211,14 +214,14 @@ class ParseServer {
211214
let usernameUniqueness = userClassPromise
212215
.then(() => databaseController.adapter.ensureUniqueness('_User', requiredUserFields, ['username']))
213216
.catch(error => {
214-
logger.warn('Unable to ensure uniqueness for usernames: ', error);
217+
log.logger.warn('Unable to ensure uniqueness for usernames: ', error);
215218
return Promise.reject(error);
216219
});
217220

218221
let emailUniqueness = userClassPromise
219222
.then(() => databaseController.adapter.ensureUniqueness('_User', requiredUserFields, ['email']))
220223
.catch(error => {
221-
logger.warn('Unable to ensure uniqueness for user email addresses: ', error);
224+
log.logger.warn('Unable to ensure uniqueness for user email addresses: ', error);
222225
return Promise.reject(error);
223226
})
224227

src/PromiseRouter.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
// themselves use our routing information, without disturbing express
66
// components that external developers may be modifying.
77

8-
import AppCache from './cache';
9-
import express from 'express';
10-
import url from 'url';
11-
import log from './logger';
12-
import {inspect} from 'util';
8+
import AppCache from './cache';
9+
import express from 'express';
10+
import url from 'url';
11+
import logging from './logging';
12+
import {inspect} from 'util';
1313

1414
export default class PromiseRouter {
1515
// Each entry should be an object with:
@@ -158,6 +158,7 @@ export default class PromiseRouter {
158158
function makeExpressHandler(appId, promiseHandler) {
159159
let config = AppCache.get(appId);
160160
return function(req, res, next) {
161+
let log = logging.logger;
161162
try {
162163
let url = maskSensitiveUrl(req);
163164
let body = maskSensitiveBody(req);

src/Routers/FunctionsRouter.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var express = require('express'),
66

77
import PromiseRouter from '../PromiseRouter';
88
import _ from 'lodash';
9-
import { logger } from '../logger';
9+
import log from '../logging';
1010

1111
function parseObject(obj) {
1212
if (Array.isArray(obj)) {
@@ -78,14 +78,14 @@ export class FunctionsRouter extends PromiseRouter {
7878

7979
return new Promise(function (resolve, reject) {
8080
var response = FunctionsRouter.createResponseObject((result) => {
81-
logger.info(`Ran cloud function ${req.params.functionName} with:\nInput: ${JSON.stringify(params)}\nResult: ${JSON.stringify(result.response.result)}`, {
81+
log.logger.info(`Ran cloud function ${req.params.functionName} with:\nInput: ${JSON.stringify(params)}\nResult: ${JSON.stringify(result.response.result)}`, {
8282
functionName: req.params.functionName,
8383
params,
8484
result: result.response.result
8585
});
8686
resolve(result);
8787
}, (error) => {
88-
logger.error(`Failed running cloud function ${req.params.functionName} with:\nInput: ${JSON.stringify(params)}\Error: ${JSON.stringify(error)}`, {
88+
log.logger.error(`Failed running cloud function ${req.params.functionName} with:\nInput: ${JSON.stringify(params)}\Error: ${JSON.stringify(error)}`, {
8989
functionName: req.params.functionName,
9090
params,
9191
error

src/authDataManager/twitter.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Helper functions for accessing the twitter API.
22
var OAuth = require('./OAuth1Client');
33
var Parse = require('parse/node').Parse;
4-
var logger = require('../logger').default;
4+
var log = require('../logging').default;
55

66
// Returns a promise that fulfills iff this user id is valid.
77
function validateAuthData(authData, options) {
@@ -30,15 +30,15 @@ function handleMultipleConfigurations(authData, options) {
3030
if (Array.isArray(options)) {
3131
let consumer_key = authData.consumer_key;
3232
if (!consumer_key) {
33-
logger.error('Twitter Auth', 'Multiple twitter configurations are available, by no consumer_key was sent by the client.');
33+
log.logger.error('Twitter Auth', 'Multiple twitter configurations are available, by no consumer_key was sent by the client.');
3434
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
3535
}
3636
options = options.filter((option) => {
3737
return option.consumer_key == consumer_key;
3838
});
3939

4040
if (options.length == 0) {
41-
logger.error('Twitter Auth','Cannot find a configuration for the provided consumer_key');
41+
log.logger.error('Twitter Auth','Cannot find a configuration for the provided consumer_key');
4242
throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, 'Twitter auth is invalid for this user.');
4343
}
4444
options = options[0];

src/cloud-code/httpRequest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import request from 'request';
22
import Parse from 'parse/node';
33
import HTTPResponse from './HTTPResponse';
44
import querystring from 'querystring';
5-
import log from '../logger';
5+
import log from '../logging';
66

77
var encodeBody = function({body, headers = {}}) {
88
if (typeof body !== 'object') {
@@ -21,7 +21,7 @@ var encodeBody = function({body, headers = {}}) {
2121
} else {
2222
/* istanbul ignore next */
2323
if (contentTypeKeys.length > 1) {
24-
log.error('Parse.Cloud.httpRequest', 'multiple content-type headers are set.');
24+
log.logger.error('Parse.Cloud.httpRequest', 'multiple content-type headers are set.');
2525
}
2626
// There maybe many, we'll just take the 1st one
2727
var contentType = contentTypeKeys[0];

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import ParseServer from './ParseServer';
2-
import logger from './logger';
2+
import logger from './logging';
33
import S3Adapter from 'parse-server-s3-adapter'
44
import FileSystemAdapter from 'parse-server-fs-adapter'
55
import InMemoryCacheAdapter from './Adapters/Cache/InMemoryCacheAdapter'

0 commit comments

Comments
 (0)