ngx-logger
Version:
[](https://www.npmjs.com/package/ngx-logger)
90 lines • 15.5 kB
JavaScript
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { NgxLoggerLevel } from '../types/logger-level.enum';
import { DEFAULT_COLOR_SCHEME } from './color-scheme';
import * as i0 from "@angular/core";
export class NGXLoggerWriterService {
constructor(platformId) {
this.platformId = platformId;
this.isIE = isPlatformBrowser(platformId) && navigator && navigator.userAgent &&
!!(navigator.userAgent.indexOf('MSIE') !== -1 || navigator.userAgent.match(/Trident\//) || navigator.userAgent.match(/Edge\//));
this.logFunc = this.isIE ? this.logIE.bind(this) : this.logModern.bind(this);
}
/** Generate a "meta" string that is displayed before the content sent to the log function */
prepareMetaString(metadata, config) {
const fileDetails = config.disableFileDetails === true ? '' : `[${metadata.fileName}:${metadata.lineNumber}:${metadata.columnNumber}]`;
return `${metadata.timestamp} ${NgxLoggerLevel[metadata.level]} ${fileDetails}`;
}
/** Get the color to use when writing to console */
getColor(metadata, config) {
var _a;
const configColorScheme = (_a = config.colorScheme) !== null && _a !== void 0 ? _a : DEFAULT_COLOR_SCHEME;
// this is needed to avoid a build error
if (metadata.level === NgxLoggerLevel.OFF) {
return undefined;
}
return configColorScheme[metadata.level];
}
/** Log to the console specifically for IE */
logIE(metadata, config, metaString) {
// Coloring doesn't work in IE
// make sure additional isn't null or undefined so that ...additional doesn't error
const additional = metadata.additional || [];
switch (metadata.level) {
case NgxLoggerLevel.WARN:
console.warn(`${metaString} `, metadata.message, ...additional);
break;
case NgxLoggerLevel.ERROR:
case NgxLoggerLevel.FATAL:
console.error(`${metaString} `, metadata.message, ...additional);
break;
case NgxLoggerLevel.INFO:
console.info(`${metaString} `, metadata.message, ...additional);
break;
default:
console.log(`${metaString} `, metadata.message, ...additional);
}
}
/** Log to the console */
logModern(metadata, config, metaString) {
const color = this.getColor(metadata, config);
// make sure additional isn't null or undefined so that ...additional doesn't error
const additional = metadata.additional || [];
switch (metadata.level) {
case NgxLoggerLevel.WARN:
console.warn(`%c${metaString}`, `color:${color}`, metadata.message, ...additional);
break;
case NgxLoggerLevel.ERROR:
case NgxLoggerLevel.FATAL:
console.error(`%c${metaString}`, `color:${color}`, metadata.message, ...additional);
break;
case NgxLoggerLevel.INFO:
console.info(`%c${metaString}`, `color:${color}`, metadata.message, ...additional);
break;
// Disabling console.trace since the stack trace is not helpful. it is showing the stack trace of
// the console.trace statement
// case NgxLoggerLevel.TRACE:
// console.trace(`%c${metaString}`, `color:${color}`, message, ...additional);
// break;
case NgxLoggerLevel.DEBUG:
console.debug(`%c${metaString}`, `color:${color}`, metadata.message, ...additional);
break;
default:
console.log(`%c${metaString}`, `color:${color}`, metadata.message, ...additional);
}
}
/** Write the content sent to the log function to the console */
writeMessage(metadata, config) {
const metaString = this.prepareMetaString(metadata, config);
this.logFunc(metadata, config, metaString);
}
}
/** @nocollapse */ NGXLoggerWriterService.ɵfac = function NGXLoggerWriterService_Factory(t) { return new (t || NGXLoggerWriterService)(i0.ɵɵinject(PLATFORM_ID)); };
/** @nocollapse */ NGXLoggerWriterService.ɵprov = i0.ɵɵdefineInjectable({ token: NGXLoggerWriterService, factory: NGXLoggerWriterService.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NGXLoggerWriterService, [{
type: Injectable
}], function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3dyaXRlci93cml0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd0RCxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQ2lDLFVBQVU7UUFBVixlQUFVLEdBQVYsVUFBVSxDQUFBO1FBRXpDLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTO1lBQzNFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFbEksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELDZGQUE2RjtJQUNuRixpQkFBaUIsQ0FBQyxRQUE0QixFQUFFLE1BQXdCO1FBQ2xGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxr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VSxDQUFDLENBQUM7Z0JBQ25GLE1BQU07WUFDUixrR0FBa0c7WUFDbEcsOEJBQThCO1lBQzlCLDZCQUE2QjtZQUM3QixnRkFBZ0Y7WUFDaEYsV0FBVztZQUVYLEtBQUssY0FBYyxDQUFDLEtBQUs7Z0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztnQkFDcEYsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztTQUNyRjtJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDekQsWUFBWSxDQUFDLFFBQTRCLEVBQUUsTUFBd0I7UUFDeEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7K0dBN0ZVLHNCQUFzQixjQU12QixXQUFXO2lGQU5WLHNCQUFzQixXQUF0QixzQkFBc0I7dUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVOztzQkFPTixNQUFNO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJNZXRhZGF0YSB9IGZyb20gJy4uL21ldGFkYXRhL2ltZXRhZGF0YSc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJDb25maWcgfSBmcm9tICcuLi9jb25maWcvaWNvbmZpZyc7XHJcbmltcG9ydCB7IElOR1hMb2dnZXJXcml0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pd3JpdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5neExvZ2dlckxldmVsIH0gZnJvbSAnLi4vdHlwZXMvbG9nZ2VyLWxldmVsLmVudW0nO1xyXG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX1NDSEVNRSB9IGZyb20gJy4vY29sb3Itc2NoZW1lJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5HWExvZ2dlcldyaXRlclNlcnZpY2UgaW1wbGVtZW50cyBJTkdYTG9nZ2VyV3JpdGVyU2VydmljZSB7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBpc0lFOiBib29sZWFuO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dGdW5jOiAobWV0YWRhdGE6IElOR1hMb2dnZXJNZXRhZGF0YSwgY29uZmlnOiBJTkdYTG9nZ2VyQ29uZmlnLCBtZXRhU3RyaW5nOiBzdHJpbmcpID0+IHZvaWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJvdGVjdGVkIHBsYXRmb3JtSWQsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzSUUgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSAmJiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJlxyXG4gICAgICAhIShuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvVHJpZGVudFxcLy8pIHx8IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8vKSk7XHJcblxyXG4gICAgdGhpcy5sb2dGdW5jID0gdGhpcy5pc0lFID8gdGhpcy5sb2dJRS5iaW5kKHRoaXMpIDogdGhpcy5sb2dNb2Rlcm4uYmluZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKiBHZW5lcmF0ZSBhIFwibWV0YVwiIHN0cmluZyB0aGF0IGlzIGRpc3BsYXllZCBiZWZvcmUgdGhlIGNvbnRlbnQgc2VudCB0byB0aGUgbG9nIGZ1bmN0aW9uICovXHJcbiAgcHJvdGVjdGVkIHByZXBhcmVNZXRhU3RyaW5nKG1ldGFkYXRhOiBJTkdYTG9nZ2VyTWV0YWRhdGEsIGNvbmZpZzogSU5HWExvZ2dlckNvbmZpZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBmaWxlRGV0YWlscyA9IGNvbmZpZy5kaXNhYmxlRmlsZURldGFpbHMgPT09IHRydWUgPyAnJyA6IGBbJHttZXRhZGF0YS5maWxlTmFtZX06JHttZXRhZGF0YS5saW5lTnVtYmVyfToke21ldGFkYXRhLmNvbHVtbk51bWJlcn1dYDtcclxuXHJcbiAgICByZXR1cm4gYCR7bWV0YWRhdGEudGltZXN0YW1wfSAke05neExvZ2dlckxldmVsW21ldGFkYXRhLmxldmVsXX0gJHtmaWxlRGV0YWlsc31gO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0aGUgY29sb3IgdG8gdXNlIHdoZW4gd3JpdGluZyB0byBjb25zb2xlICovXHJcbiAgcHJvdGVjdGVkIGdldENvbG9yKG1ldGFkYXRhOiBJTkdYTG9nZ2VyTWV0YWRhdGEsIGNvbmZpZzogSU5HWExvZ2dlckNvbmZpZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBjb25maWdDb2xvclNjaGVtZSA9IGNvbmZpZy5jb2xvclNjaGVtZSA/PyBERUZBVUxUX0NPTE9SX1NDSEVNRTtcclxuXHJcbiAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byBhdm9pZCBhIGJ1aWxkIGVycm9yXHJcbiAgICBpZiAobWV0YWRhdGEubGV2ZWwgPT09IE5neExvZ2dlckxldmVsLk9GRikge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ0NvbG9yU2NoZW1lW21ldGFkYXRhLmxldmVsXTtcclxuICB9XHJcblxyXG4gIC8qKiBMb2cgdG8gdGhlIGNvbnNvbGUgc3BlY2lmaWNhbGx5IGZvciBJRSAqL1xyXG4gIHByb3RlY3RlZCBsb2dJRShtZXRhZGF0YTogSU5HWExvZ2dlck1ldGFkYXRhLCBjb25maWc6IElOR1hMb2dnZXJDb25maWcsIG1ldGFTdHJpbmc6IHN0cmluZyk6IHZvaWQge1xyXG5cclxuICAgIC8vIENvbG9yaW5nIGRvZXNuJ3Qgd29yayBpbiBJRVxyXG5cclxuICAgIC8vIG1ha2Ugc3VyZSBhZGRpdGlvbmFsIGlzbid0IG51bGwgb3IgdW5kZWZpbmVkIHNvIHRoYXQgLi4uYWRkaXRpb25hbCBkb2Vzbid0IGVycm9yXHJcbiAgICBjb25zdCBhZGRpdGlvbmFsID0gbWV0YWRhdGEuYWRkaXRpb25hbCB8fCBbXTtcclxuXHJcbiAgICBzd2l0Y2ggKG1ldGFkYXRhLmxldmVsKSB7XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuV0FSTjpcclxuICAgICAgICBjb25zb2xlLndhcm4oYCR7bWV0YVN0cmluZ30gYCwgbWV0YWRhdGEubWVzc2FnZSwgLi4uYWRkaXRpb25hbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuRVJST1I6XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuRkFUQUw6XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgJHttZXRhU3RyaW5nfSBgLCBtZXRhZGF0YS5tZXNzYWdlLCAuLi5hZGRpdGlvbmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBOZ3hMb2dnZXJMZXZlbC5JTkZPOlxyXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgJHttZXRhU3RyaW5nfSBgLCBtZXRhZGF0YS5tZXNzYWdlLCAuLi5hZGRpdGlvbmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmxvZyhgJHttZXRhU3RyaW5nfSBgLCBtZXRhZGF0YS5tZXNzYWdlLCAuLi5hZGRpdGlvbmFsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBMb2cgdG8gdGhlIGNvbnNvbGUgKi9cclxuICBwcm90ZWN0ZWQgbG9nTW9kZXJuKG1ldGFkYXRhOiBJTkdYTG9nZ2VyTWV0YWRhdGEsIGNvbmZpZzogSU5HWExvZ2dlckNvbmZpZywgbWV0YVN0cmluZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZ2V0Q29sb3IobWV0YWRhdGEsIGNvbmZpZyk7XHJcblxyXG4gICAgLy8gbWFrZSBzdXJlIGFkZGl0aW9uYWwgaXNuJ3QgbnVsbCBvciB1bmRlZmluZWQgc28gdGhhdCAuLi5hZGRpdGlvbmFsIGRvZXNuJ3QgZXJyb3JcclxuICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBtZXRhZGF0YS5hZGRpdGlvbmFsIHx8IFtdO1xyXG5cclxuICAgIHN3aXRjaCAobWV0YWRhdGEubGV2ZWwpIHtcclxuICAgICAgY2FzZSBOZ3hMb2dnZXJMZXZlbC5XQVJOOlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgJWMke21ldGFTdHJpbmd9YCwgYGNvbG9yOiR7Y29sb3J9YCwgbWV0YWRhdGEubWVzc2FnZSwgLi4uYWRkaXRpb25hbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuRVJST1I6XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuRkFUQUw6XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgJWMke21ldGFTdHJpbmd9YCwgYGNvbG9yOiR7Y29sb3J9YCwgbWV0YWRhdGEubWVzc2FnZSwgLi4uYWRkaXRpb25hbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuSU5GTzpcclxuICAgICAgICBjb25zb2xlLmluZm8oYCVjJHttZXRhU3RyaW5nfWAsIGBjb2xvcjoke2NvbG9yfWAsIG1ldGFkYXRhLm1lc3NhZ2UsIC4uLmFkZGl0aW9uYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgRGlzYWJsaW5nIGNvbnNvbGUudHJhY2Ugc2luY2UgdGhlIHN0YWNrIHRyYWNlIGlzIG5vdCBoZWxwZnVsLiBpdCBpcyBzaG93aW5nIHRoZSBzdGFjayB0cmFjZSBvZlxyXG4gICAgICAvLyB0aGUgY29uc29sZS50cmFjZSBzdGF0ZW1lbnRcclxuICAgICAgLy8gY2FzZSBOZ3hMb2dnZXJMZXZlbC5UUkFDRTpcclxuICAgICAgLy8gICBjb25zb2xlLnRyYWNlKGAlYyR7bWV0YVN0cmluZ31gLCBgY29sb3I6JHtjb2xvcn1gLCBtZXNzYWdlLCAuLi5hZGRpdGlvbmFsKTtcclxuICAgICAgLy8gICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgTmd4TG9nZ2VyTGV2ZWwuREVCVUc6XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgJWMke21ldGFTdHJpbmd9YCwgYGNvbG9yOiR7Y29sb3J9YCwgbWV0YWRhdGEubWVzc2FnZSwgLi4uYWRkaXRpb25hbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coYCVjJHttZXRhU3RyaW5nfWAsIGBjb2xvcjoke2NvbG9yfWAsIG1ldGFkYXRhLm1lc3NhZ2UsIC4uLmFkZGl0aW9uYWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFdyaXRlIHRoZSBjb250ZW50IHNlbnQgdG8gdGhlIGxvZyBmdW5jdGlvbiB0byB0aGUgY29uc29sZSAqL1xyXG4gIHB1YmxpYyB3cml0ZU1lc3NhZ2UobWV0YWRhdGE6IElOR1hMb2dnZXJNZXRhZGF0YSwgY29uZmlnOiBJTkdYTG9nZ2VyQ29uZmlnKTogdm9pZCB7XHJcbiAgICBjb25zdCBtZXRhU3RyaW5nID0gdGhpcy5wcmVwYXJlTWV0YVN0cmluZyhtZXRhZGF0YSwgY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLmxvZ0Z1bmMobWV0YWRhdGEsIGNvbmZpZywgbWV0YVN0cmluZyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==