Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 3 additions & 27 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
{
"root": true,
"extends": [
"eslint:recommended",
"plugin:import/errors",
"plugin:import/warnings",
"wework",
"wework/imports"
],
"env": {
"commonjs": true,
Expand All @@ -22,34 +21,11 @@
}
},
"rules": {
"no-extra-boolean-cast": 0,
"no-prototype-builtins": 0,
"no-unused-vars": ["error", { "vars": "all", "args": "none", "varsIgnorePattern": "logger" }],
"max-len": [2, {"code": 120, "tabWidth": 2, "ignoreUrls": true}],
"arrow-spacing": 2,
"object-curly-spacing": [2, "always"],
"no-multiple-empty-lines": 0,
"id-length": [2, {"exceptions": ["$", "_", "L", "v", "w", "h", "i", "j"]}],
"array-bracket-spacing": [0, "always"],
"arrow-body-style": 0,
"no-underscore-dangle": 0,
"func-names": 0,
"padded-blocks": 0,
"class-methods-use-this": 0,

# ensure JSDoc comments are valid
"valid-jsdoc": [1, {
"requireReturn": false,
requireParamDescription: false,
requireReturnDescription: false
}],

"import/prefer-default-export": 0,
"import/no-extraneous-dependencies": 0,
"import/no-unresolved": 0,
"import/no-duplicates": 0,
"import/newline-after-import": 0,
"import/imports-first": 0,
"import/extensions": 0,
}]
},
}
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"bundle:node": "rollup -c --environment RUNTIME_ENV:node",
"bundle:browser": "rollup -c --environment RUNTIME_ENV:client",
"start": "npm test && npm run dist",
"dist": "npm run lint && npm run clean && npm run bundle && npm run docs",
"dist": "npm run clean && npm run bundle && npm run lint && npm run docs",
"docs": "documentation build src/client.js src/node.js --github --format md --output API.md",
"security-scan": "nsp check --output summary --warn-only",
"pretest": "npm run bundle",
Expand Down Expand Up @@ -90,13 +90,14 @@
"babel-polyfill": "6.22.0",
"babel-preset-es2015": "6.22.0",
"babel-preset-stage-0": "6.22.0",
"babel-register": "6.22.0",
"benchmark": "2.1.3",
"chai": "3.5.0",
"coveralls": "2.11.16",
"documentation": "4.0.0-beta.18",
"eslint": "3.14.0",
"eslint": "3.15.0",
"eslint-config-wework": "2.0.0",
"eslint-friendly-formatter": "2.0.7",
"eslint-plugin-import": "2.2.0",
"eslint-plugin-mocha": "4.8.0",
"express": "4.14.1",
"ghooks": "2.0.0",
Expand Down
67 changes: 33 additions & 34 deletions src/client.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,15 @@
'use strict';

import bunyan from 'bunyan';

// Safe console access for oldIE
import console from 'console';

import logForLevel from './util/common/logForLevel';
import { assembleConfig, toBunyanConfig, BUNYAN_LOGGER_LEVELS } from './util/common/config';

import ClientConsoleLogger from './util/client/consoleLogger';
import ClientLogentriesLogger from './util/client/logentriesLogger';
import ClientRollbarLogger, { isGlobalRollbarConfigured } from './util/client/rollbarLogger';

// Safe console access for oldIE
import console from 'console';

/**
* A logger than can be used in browsers
* @param {Object} config - we-js-logger config
* @param {Object?} logger - an instance of a `bunyan` logger to use internally.
* this is meant to be used by the `child` method.
*/
export default function ClientLogger(config = {}, logger) {
const clientConfig = assembleConfig(config, getStreams);
logger = logger || bunyan.createLogger(toBunyanConfig(clientConfig));

this._config = config;
this._logger = logger;
}

ClientLogger.prototype.child = function () {
const childLogger = this._logger.child.apply(this._logger, arguments);
return new ClientLogger(this._config, childLogger);
}

// Dynamically hoist + wrap bunyan log instance methods (logger.info, logger.warn, etc)
BUNYAN_LOGGER_LEVELS.forEach(level => {
ClientLogger.prototype[level] = logForLevel(level);
});


/**
* Add standard Client logger streams to `config.streams`
* @private
Expand All @@ -56,7 +29,7 @@ function getStreams(config) {
name: 'stdout',
level: config.level,
stream: new ClientConsoleLogger(),
type: 'raw'
type: 'raw',
});
}

Expand All @@ -73,7 +46,7 @@ function getStreams(config) {
environment: config.environment,
codeVersion: config.codeVersion,
}),
type: 'raw'
type: 'raw',
});
}
} else {
Expand All @@ -89,11 +62,37 @@ function getStreams(config) {
level: config.level,
stream: new ClientLogentriesLogger({
name: config.name,
token: config.logentriesToken
token: config.logentriesToken,
}),
type: 'raw'
type: 'raw',
});
}

return streams;
}

/**
* A logger than can be used in browsers
* @param {Object} config - we-js-logger config
* @param {Object?} logger - an instance of a `bunyan` logger to use internally.
* this is meant to be used by the `child` method.
*/
export default function ClientLogger(config = {}, logger) {
const clientConfig = assembleConfig(config, getStreams);
logger = logger || bunyan.createLogger(toBunyanConfig(clientConfig)); // eslint-disable-line no-param-reassign

this._config = config;
this._logger = logger;
}

/* eslint-disable prefer-spread, prefer-rest-params */
ClientLogger.prototype.child = function () {
const childLogger = this._logger.child.apply(this._logger, arguments);
return new ClientLogger(this._config, childLogger);
};
/* eslint-enable */

// Dynamically hoist + wrap bunyan log instance methods (logger.info, logger.warn, etc)
BUNYAN_LOGGER_LEVELS.forEach((level) => {
ClientLogger.prototype[level] = logForLevel(level);
});
72 changes: 37 additions & 35 deletions src/node.js
Original file line number Diff line number Diff line change
@@ -1,44 +1,14 @@
'use strict';

import bunyan from 'bunyan';
import Rollbar from 'rollbar';
import bunyanFormat from 'bunyan-format';

import { assembleConfig, toBunyanConfig, BUNYAN_LOGGER_LEVELS } from './util/common/config';
import logForLevel from './util/common/logForLevel';

import Rollbar from 'rollbar';
import bunyanFormat from 'bunyan-format';
import ServerRollbarLogger from './util/server/rollbarLogger';
import ServerLogentriesLogger from './util/server/logentriesLogger';
import createRequestLogger from './util/server/requestLogger';

/**
* A logger than can be used in node processes
* @param {Object} config - we-js-logger config
* @param {Object?} logger - an instance of a `bunyan` logger to use internally.
* this is meant to be used by the `child` method.
*/
export default function NodeLogger(config = {}, logger) {
const serverConfig = assembleConfig(config, getStreams);
logger = logger || bunyan.createLogger(toBunyanConfig(serverConfig));

this._config = config;
this._logger = logger;

// Server-specific extras
this.requestLogger = createRequestLogger(this, serverConfig);
this.rollbarErrorMiddleware = Rollbar.errorHandler(serverConfig.rollbarToken);
}

NodeLogger.prototype.child = function () {
const childLogger = this._logger.child.apply(this._logger, arguments);
return new NodeLogger(this._config, childLogger);
}

// Dynamically hoist + wrap bunyan log instance methods (logger.info, logger.warn, etc)
BUNYAN_LOGGER_LEVELS.forEach(level => {
NodeLogger.prototype[level] = logForLevel(level);
});

/**
* Add standard Node logger streams to `config.streams`
* @private
Expand All @@ -57,7 +27,7 @@ function getStreams(config) {
name: 'stdout',
level: config.level,
stream: bunyanFormat({ outputMode: 'short' }),
type: 'stream'
type: 'stream',
});
}

Expand All @@ -73,7 +43,7 @@ function getStreams(config) {
environment: config.environment,
codeVersion: config.codeVersion,
}),
type: 'raw'
type: 'raw',
});
}

Expand All @@ -82,9 +52,41 @@ function getStreams(config) {
streams.push(new ServerLogentriesLogger({
name: config.name,
token: config.logentriesToken,
level: config.level
level: config.level,
}));
}

return streams;
}

/**
* A logger than can be used in node processes
* @param {Object} config - we-js-logger config
* @param {Object?} logger - an instance of a `bunyan` logger to use internally.
* this is meant to be used by the `child` method.
*/
export default function NodeLogger(config = {}, logger) {
const serverConfig = assembleConfig(config, getStreams);
logger = logger || bunyan.createLogger(toBunyanConfig(serverConfig)); // eslint-disable-line no-param-reassign

this._config = config;
this._logger = logger;

// Server-specific extras
this.requestLogger = createRequestLogger(this, serverConfig);
this.rollbarErrorMiddleware = Rollbar.errorHandler(serverConfig.rollbarToken);
}

/* eslint-disable prefer-spread, prefer-rest-params */
NodeLogger.prototype.child = function () {
const childLogger = this._logger.child.apply(this._logger, arguments);
return new NodeLogger(this._config, childLogger);
};
/* eslint-enable */

// Dynamically hoist + wrap bunyan log instance methods (logger.info, logger.warn, etc)
BUNYAN_LOGGER_LEVELS.forEach((level) => {
NodeLogger.prototype[level] = logForLevel(level);
});


2 changes: 1 addition & 1 deletion src/util/client/logentriesLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function ClientLogentriesLogger({ name, token }) {
name,
token,
no_format: true,
page_info: 'per-page'
page_info: 'per-page',
});
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/util/client/rollbarLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ export default function ClientRollbarLogger({ token, environment, codeVersion })
environment,
javascript: {
code_version: codeVersion,
source_map_enabled: true
}
source_map_enabled: true,
},
},
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/util/common/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export function assembleConfig(config, getStreamsForRuntime) {

// Add our custom streams and return a full `we-js-logger` config object
return Object.assign(baseConfig, {
streams: getStreamsForRuntime(baseConfig)
streams: getStreamsForRuntime(baseConfig),
});
}

Expand Down
4 changes: 3 additions & 1 deletion src/util/common/logForLevel.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable prefer-spread */

import scrub from './scrub';

/**
Expand All @@ -16,5 +18,5 @@ export default function logForLevel(level) {
*/
return function logIt(...args) {
return this._logger[level].apply(this._logger, scrub(args, this._config, this._logger));
}
};
}
4 changes: 3 additions & 1 deletion src/util/common/rollbar.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable import/prefer-default-export */

import bunyan from 'bunyan';

/**
Expand All @@ -12,7 +14,7 @@ const bunyanToRollbarLevelMap = {
warn: 'warning',
info: 'info',
debug: 'debug',
trace: 'debug'
trace: 'debug',
};

/**
Expand Down
2 changes: 1 addition & 1 deletion src/util/common/scrub.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ function handleContext(data, config = {}, logger) {
export default function scrub(args, config = {}, logger) {
if (Array.isArray(config.scrubFields) && config.scrubFields.length) {
if (isObject(args[0])) {
return [handleContext(args[0], config, logger), ...hideSecrets(tail(args), getScrubConfig(config))]
return [handleContext(args[0], config, logger), ...hideSecrets(tail(args), getScrubConfig(config))];
}

return hideSecrets(args, getScrubConfig(config));
Expand Down
2 changes: 1 addition & 1 deletion src/util/server/logentriesLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export default function ServerLogentriesLogger({ name, token, level }) {
name,
token,
secure: true,
withStack: true
withStack: true,
});
loggerDefinition.level = level;

Expand Down
6 changes: 3 additions & 3 deletions src/util/server/requestLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export default function createRequestLogger(logger, { reqIdHeader = DEFAULT_HEAD
let log = logger.child({ component: 'request', req_id: id, req });

// attach a logger to each request
req.log = log;
req.log = log; // eslint-disable-line no-param-reassign

res.setHeader(reqIdHeader, id);

Expand All @@ -35,11 +35,11 @@ export default function createRequestLogger(logger, { reqIdHeader = DEFAULT_HEAD
const time = process.hrtime();
res.on('finish', () => {
const diff = process.hrtime(time);
const duration = diff[0] * 1e3 + diff[1] * 1e-6;
const duration = diff[0] * 1e3 + diff[1] * 1e-6; // eslint-disable-line no-mixed-operators
log.info({ res, duration }, 'end request');

// Release the request logger for GC
req.log = null;
req.log = null; // eslint-disable-line no-param-reassign
log = null;
});

Expand Down
Loading