UNPKG

6.7 kBJavaScriptView Raw
1"use strict";
2var _a;
3Object.defineProperty(exports, "__esModule", { value: true });
4var tslib_1 = require("tslib");
5var browser_core_1 = require("@datadog/browser-core");
6var StatusType;
7(function (StatusType) {
8 StatusType["debug"] = "debug";
9 StatusType["info"] = "info";
10 StatusType["warn"] = "warn";
11 StatusType["error"] = "error";
12})(StatusType = exports.StatusType || (exports.StatusType = {}));
13exports.STATUS_PRIORITIES = (_a = {},
14 _a[StatusType.debug] = 0,
15 _a[StatusType.info] = 1,
16 _a[StatusType.warn] = 2,
17 _a[StatusType.error] = 3,
18 _a);
19exports.STATUSES = Object.keys(StatusType);
20var HandlerType;
21(function (HandlerType) {
22 HandlerType["http"] = "http";
23 HandlerType["console"] = "console";
24 HandlerType["silent"] = "silent";
25})(HandlerType = exports.HandlerType || (exports.HandlerType = {}));
26function startLogger(errorObservable, configuration, session, internalMonitoring) {
27 var _a;
28 var globalContext = {};
29 internalMonitoring.setExternalContextProvider(function () { return browser_core_1.deepMerge({ session_id: session.getId() }, globalContext, getRUMInternalContext()); });
30 var batch = startLoggerBatch(configuration, session, function () { return globalContext; });
31 var handlers = (_a = {},
32 _a[HandlerType.console] = function (message) { return console.log(message.status + ": " + message.message); },
33 _a[HandlerType.http] = function (message) { return batch.add(message); },
34 _a[HandlerType.silent] = browser_core_1.noop,
35 _a);
36 var logger = new Logger(session, handlers);
37 customLoggers = {};
38 errorObservable.subscribe(function (e) {
39 return logger.error(e.message, browser_core_1.deepMerge(tslib_1.__assign({ date: browser_core_1.getTimestamp(e.startTime) }, e.context), getRUMInternalContext(e.startTime)));
40 });
41 var globalApi = {};
42 globalApi.setLoggerGlobalContext = function (context) {
43 globalContext = context;
44 };
45 globalApi.addLoggerGlobalContext = function (key, value) {
46 globalContext[key] = value;
47 };
48 globalApi.createLogger = makeCreateLogger(session, handlers);
49 globalApi.getLogger = getLogger;
50 globalApi.logger = logger;
51 return globalApi;
52}
53exports.startLogger = startLogger;
54function startLoggerBatch(configuration, session, globalContextProvider) {
55 var primaryBatch = createLoggerBatch(configuration.logsEndpoint);
56 var replicaBatch;
57 if (configuration.replica !== undefined) {
58 replicaBatch = createLoggerBatch(configuration.replica.logsEndpoint);
59 }
60 function createLoggerBatch(endpointUrl) {
61 return new browser_core_1.Batch(new browser_core_1.HttpRequest(endpointUrl, configuration.batchBytesLimit), configuration.maxBatchSize, configuration.batchBytesLimit, configuration.maxMessageSize, configuration.flushTimeout);
62 }
63 function withContext(message) {
64 return browser_core_1.deepMerge({
65 date: new Date().getTime(),
66 session_id: session.getId(),
67 view: {
68 referrer: document.referrer,
69 url: window.location.href,
70 },
71 }, globalContextProvider(), getRUMInternalContext(), message);
72 }
73 return {
74 add: function (message) {
75 var contextualizedMessage = withContext(message);
76 primaryBatch.add(contextualizedMessage);
77 if (replicaBatch) {
78 replicaBatch.add(contextualizedMessage);
79 }
80 },
81 };
82}
83var customLoggers;
84function makeCreateLogger(session, handlers) {
85 return function (name, conf) {
86 if (conf === void 0) { conf = {}; }
87 customLoggers[name] = new Logger(session, handlers, conf.handler, conf.level, tslib_1.__assign(tslib_1.__assign({}, conf.context), { logger: { name: name } }));
88 return customLoggers[name];
89 };
90}
91function getLogger(name) {
92 return customLoggers[name];
93}
94var Logger = /** @class */ (function () {
95 function Logger(session, handlers, handler, level, loggerContext) {
96 if (handler === void 0) { handler = HandlerType.http; }
97 if (level === void 0) { level = StatusType.debug; }
98 if (loggerContext === void 0) { loggerContext = {}; }
99 this.session = session;
100 this.handlers = handlers;
101 this.level = level;
102 this.loggerContext = loggerContext;
103 this.handler = this.handlers[handler];
104 }
105 Logger.prototype.log = function (message, messageContext, status) {
106 if (messageContext === void 0) { messageContext = {}; }
107 if (status === void 0) { status = StatusType.info; }
108 if (this.session.isTracked() && exports.STATUS_PRIORITIES[status] >= exports.STATUS_PRIORITIES[this.level]) {
109 this.handler(tslib_1.__assign({ message: message, status: status }, browser_core_1.deepMerge({}, this.loggerContext, messageContext)));
110 }
111 };
112 Logger.prototype.debug = function (message, messageContext) {
113 if (messageContext === void 0) { messageContext = {}; }
114 this.log(message, messageContext, StatusType.debug);
115 };
116 Logger.prototype.info = function (message, messageContext) {
117 if (messageContext === void 0) { messageContext = {}; }
118 this.log(message, messageContext, StatusType.info);
119 };
120 Logger.prototype.warn = function (message, messageContext) {
121 if (messageContext === void 0) { messageContext = {}; }
122 this.log(message, messageContext, StatusType.warn);
123 };
124 Logger.prototype.error = function (message, messageContext) {
125 if (messageContext === void 0) { messageContext = {}; }
126 var errorOrigin = {
127 error: {
128 origin: browser_core_1.ErrorOrigin.LOGGER,
129 },
130 };
131 this.log(message, browser_core_1.deepMerge({}, errorOrigin, messageContext), StatusType.error);
132 };
133 Logger.prototype.setContext = function (context) {
134 this.loggerContext = context;
135 };
136 Logger.prototype.addContext = function (key, value) {
137 this.loggerContext[key] = value;
138 };
139 Logger.prototype.removeContext = function (key) {
140 delete this.loggerContext[key];
141 };
142 Logger.prototype.setHandler = function (handler) {
143 this.handler = this.handlers[handler];
144 };
145 Logger.prototype.setLevel = function (level) {
146 this.level = level;
147 };
148 tslib_1.__decorate([
149 browser_core_1.monitored
150 ], Logger.prototype, "log", null);
151 return Logger;
152}());
153exports.Logger = Logger;
154function getRUMInternalContext(startTime) {
155 var rum = window.DD_RUM;
156 return rum && rum.getInternalContext ? rum.getInternalContext(startTime) : undefined;
157}
158//# sourceMappingURL=logger.js.map
\No newline at end of file