@datadog/browser-logs
Version:
125 lines • 5.65 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.STATUSES = exports.HandlerType = void 0;
const browser_core_1 = require("@datadog/browser-core");
const isAuthorized_1 = require("./logger/isAuthorized");
const createErrorFieldFromRawError_1 = require("./createErrorFieldFromRawError");
exports.HandlerType = {
console: 'console',
http: 'http',
silent: 'silent',
};
exports.STATUSES = Object.keys(isAuthorized_1.StatusType);
// note: it is safe to merge declarations as long as the methods are actually defined on the prototype
// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging, no-restricted-syntax
class Logger {
constructor(handleLogStrategy, name, handlerType = exports.HandlerType.http, level = isAuthorized_1.StatusType.debug, loggerContext = {}) {
this.handleLogStrategy = handleLogStrategy;
this.handlerType = handlerType;
this.level = level;
this.contextManager = (0, browser_core_1.createContextManager)('logger');
this.tags = [];
this.contextManager.setContext(loggerContext);
if (name) {
this.contextManager.setContextProperty('logger', { name });
}
}
logImplementation(message, messageContext, status = isAuthorized_1.StatusType.info, error, handlingStack) {
const sanitizedMessageContext = (0, browser_core_1.sanitize)(messageContext);
let context;
if (error !== undefined && error !== null) {
const rawError = (0, browser_core_1.computeRawError)({
originalError: error,
nonErrorPrefix: "Provided" /* NonErrorPrefix.PROVIDED */,
source: browser_core_1.ErrorSource.LOGGER,
handling: "handled" /* ErrorHandling.HANDLED */,
startClocks: (0, browser_core_1.clocksNow)(),
});
context = (0, browser_core_1.combine)({
error: (0, createErrorFieldFromRawError_1.createErrorFieldFromRawError)(rawError, { includeMessage: true }),
}, rawError.context, sanitizedMessageContext);
}
else {
context = sanitizedMessageContext;
}
this.handleLogStrategy({
message: (0, browser_core_1.sanitize)(message),
context,
status,
}, this, handlingStack);
}
log(message, messageContext, status = isAuthorized_1.StatusType.info, error) {
let handlingStack;
if ((0, isAuthorized_1.isAuthorized)(status, exports.HandlerType.http, this)) {
handlingStack = (0, browser_core_1.createHandlingStack)('log');
}
this.logImplementation(message, messageContext, status, error, handlingStack);
}
setContext(context) {
this.contextManager.setContext(context);
}
getContext() {
return this.contextManager.getContext();
}
setContextProperty(key, value) {
this.contextManager.setContextProperty(key, value);
}
removeContextProperty(key) {
this.contextManager.removeContextProperty(key);
}
clearContext() {
this.contextManager.clearContext();
}
addTag(key, value) {
this.tags.push((0, browser_core_1.buildTag)(key, value));
}
removeTagsWithKey(key) {
const sanitizedKey = (0, browser_core_1.sanitizeTag)(key);
this.tags = this.tags.filter((tag) => tag !== sanitizedKey && !tag.startsWith(`${sanitizedKey}:`));
}
getTags() {
return this.tags.slice();
}
setHandler(handler) {
this.handlerType = handler;
}
getHandler() {
return this.handlerType;
}
setLevel(level) {
this.level = level;
}
getLevel() {
return this.level;
}
}
exports.Logger = Logger;
__decorate([
browser_core_1.monitored
], Logger.prototype, "logImplementation", null);
/* eslint-disable local-rules/disallow-side-effects */
Logger.prototype.ok = createLoggerMethod(isAuthorized_1.StatusType.ok);
Logger.prototype.debug = createLoggerMethod(isAuthorized_1.StatusType.debug);
Logger.prototype.info = createLoggerMethod(isAuthorized_1.StatusType.info);
Logger.prototype.notice = createLoggerMethod(isAuthorized_1.StatusType.notice);
Logger.prototype.warn = createLoggerMethod(isAuthorized_1.StatusType.warn);
Logger.prototype.error = createLoggerMethod(isAuthorized_1.StatusType.error);
Logger.prototype.critical = createLoggerMethod(isAuthorized_1.StatusType.critical);
Logger.prototype.alert = createLoggerMethod(isAuthorized_1.StatusType.alert);
Logger.prototype.emerg = createLoggerMethod(isAuthorized_1.StatusType.emerg);
function createLoggerMethod(status) {
return function (message, messageContext, error) {
let handlingStack;
if ((0, isAuthorized_1.isAuthorized)(status, exports.HandlerType.http, this)) {
handlingStack = (0, browser_core_1.createHandlingStack)('log');
}
this.logImplementation(message, messageContext, status, error, handlingStack);
};
}
//# sourceMappingURL=logger.js.map