-
Notifications
You must be signed in to change notification settings - Fork 3
/
rollbarLogger.js
55 lines (50 loc) · 1.78 KB
/
rollbarLogger.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
import omit from 'lodash/omit';
import get from 'lodash/get';
import isFunction from 'lodash/isFunction';
import { bunyanLevelToRollbarLevelName } from '../common/rollbar';
// Rollbar script exposes this global immediately, whether or not its already initialized
export const isGlobalRollbarConfigured = () => !!get(global, 'Rollbar');
/**
* Custom rollbar stream that transports to logentries from a browser
* Wortks with a global Rollbar instance that is already initialized.
* Note this expects rollbar to be loaded in the head, not via an npm module.
* See https://rollbar.com/docs/notifier/rollbar.js/#quick-start for details on
* integrating Rollbar in client apps
*
* @param {String} options.token
* @param {String} options.environment
* @param {String} options.codeVersion
*/
export default function ClientRollbarLogger({ token, environment, codeVersion }) {
// Rollbar may already be initialized, but thats ok
// https://rollbar.com/docs/notifier/rollbar.js/configuration/
global.Rollbar.configure({
accessToken: token,
environment,
captureUncaught: true,
captureUnhandledRejections: true,
payload: {
environment,
javascript: {
code_version: codeVersion,
source_map_enabled: true,
},
},
});
}
/**
* Transport logs to Rollbar
* @param {Object} data
* @returns {undefined}
*/
ClientRollbarLogger.prototype.write = function (data = {}) {
const rollbarLevelName = bunyanLevelToRollbarLevelName(data.level);
const scopeData = omit(data, ['req', 'level']);
// https://rollbar.com/docs/notifier/rollbar.js/#rollbarlog
const logFn = global.Rollbar[rollbarLevelName];
if (isFunction(logFn)) {
logFn.call(global.Rollbar, data.msg, data.err, scopeData);
} else {
global.Rollbar.error(data.msg, data.err, scopeData);
}
};