-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathclient.js
101 lines (88 loc) · 2.93 KB
/
client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import bunyan, { stdSerializers } 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';
/**
* Add standard Client logger streams to `config.streams`
* @private
* @param {Object} config
* @param {Array?} config.streams
* @returns {Array}
*/
function getStreams(config) {
// Any passed in streams
const streams = Array.isArray(config.streams)
? [...config.streams]
: [];
// Nice console output
if (config.stdout) {
streams.push({
name: 'stdout',
level: config.level,
stream: new ClientConsoleLogger(),
type: 'raw',
});
}
// Rollbar Transport
// Messages at the warn level or higher are transported to Rollbar
// Detects presence of global Rollbar and passed in token
if (isGlobalRollbarConfigured()) {
if (config.rollbarToken) {
streams.push({
name: 'rollbar',
level: 'warn',
stream: new ClientRollbarLogger({
token: config.rollbarToken,
environment: config.environment,
codeVersion: config.codeVersion,
}),
type: 'raw',
});
}
} else {
/* eslint-disable no-console */
console.warn('Client rollbar is not correctly configured');
/* eslint-enable */
}
// Transport client logs
if (config.logentriesToken) {
streams.push({
name: 'logentries',
level: config.level,
stream: new ClientLogentriesLogger({
name: config.name,
token: config.logentriesToken,
}),
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);
});
// Expose bunyan stdSerializers
ClientLogger.bunyanStdSerializers = stdSerializers;