UNPKG

@ngworker/lumberjack

Version:

Lumberjack is a versatile Angular logging library, specifically designed to be extended and customized

103 lines 11.4 kB
import { HttpClient } from '@angular/common/http'; import { inject, Injectable, NgZone } from '@angular/core'; import { Subscription } from 'rxjs'; import { lumberjackHttpDriverConfigToken } from '../configuration/lumberjack-http-driver-config.token'; import { retryWithDelay } from '../operators/retry-with-delay.operator'; import * as i0 from "@angular/core"; /** * The HTTP driver transports logs to the configured web API log store using the * POST HTTP verb. * * It sends the formatted log and the log including the optional log payload. */ export class LumberjackHttpDriver { static driverIdentifier = 'LumberjackHttpDriver'; #http = inject(HttpClient); #ngZone = inject(NgZone); #subscriptions = new Subscription(); config = inject(lumberjackHttpDriverConfigToken); ngOnDestroy() { this.#subscriptions.unsubscribe(); } /** * Send critical log to the log store. * * @param param0 The log and its text representation. */ logCritical({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send debug log to the log store. * * @param param0 The log and its text representation. */ logDebug({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send error log to the log store. * * @param param0 The log and its text representation. */ logError({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send info log to the log store. * * @param param0 The log and its text representation. */ logInfo({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send trace log to the log store. * * @param param0 The log and its text representation. */ logTrace({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send warning log to the log store. * * @param param0 The log and its text representation. */ logWarning({ formattedLog, log }) { this.#sendLog(formattedLog, log); } /** * Send log to the log store. * * This is done outside of the `NgZone` as there's no need this to trigger * change detection. * * Failed HTTP requests are retried according to the configured retry options. * * When the last retry fails, the driver will throw a `LumberjackHttpDriverError` * and the log being sent gets discarded. * * @param formattedLog The log's text representation. * @param log The log. */ #sendLog(formattedLog, log) { const { origin, retryOptions, storeUrl } = this.config; const httpLog = { formattedLog, origin, log }; this.#ngZone.runOutsideAngular(() => { this.#subscriptions.add(this.#http .post(storeUrl, httpLog) .pipe(retryWithDelay(retryOptions.maxRetries, retryOptions.delayMs)) // HTTP requests complete after the response is received, so there's no need to unsubscribe. .subscribe(() => { // No-op })); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: LumberjackHttpDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: LumberjackHttpDriver }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: LumberjackHttpDriver, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHVtYmVyamFjay1odHRwLmRyaXZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nd29ya2VyL2x1bWJlcmphY2svaHR0cC1kcml2ZXIvc3JjL2xpYi9sb2ctZHJpdmVycy9sdW1iZXJqYWNrLWh0dHAuZHJpdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUlwQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUV2RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7O0FBRXhFOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUcvQixNQUFNLENBQVUsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUM7SUFFakQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXBDLE1BQU0sR0FBRyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUUxRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQW9DO1FBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBb0M7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFvQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQW9DO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBb0M7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFvQztRQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFFBQVEsQ0FBQyxZQUFvQixFQUFFLEdBQTRCO1FBQ3pELE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkQsTUFBTSxPQUFPLEdBQWdDLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUzRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsSUFBSSxDQUFDLEtBQUs7aUJBQ1AsSUFBSSxDQUFPLFFBQVEsRUFBRSxPQUFPLENBQUM7aUJBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BFLDRGQUE0RjtpQkFDM0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxRQUFRO1lBQ1YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0FsR1Usb0JBQW9COzJHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEx1bWJlcmphY2tMb2csIEx1bWJlcmphY2tMb2dEcml2ZXIsIEx1bWJlcmphY2tMb2dEcml2ZXJMb2csIEx1bWJlcmphY2tMb2dQYXlsb2FkIH0gZnJvbSAnQG5nd29ya2VyL2x1bWJlcmphY2snO1xuXG5pbXBvcnQgeyBsdW1iZXJqYWNrSHR0cERyaXZlckNvbmZpZ1Rva2VuIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi9sdW1iZXJqYWNrLWh0dHAtZHJpdmVyLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBMdW1iZXJqYWNrSHR0cExvZyB9IGZyb20gJy4uL2xvZ3MvbHVtYmVyamFjay1odHRwLmxvZyc7XG5pbXBvcnQgeyByZXRyeVdpdGhEZWxheSB9IGZyb20gJy4uL29wZXJhdG9ycy9yZXRyeS13aXRoLWRlbGF5Lm9wZXJhdG9yJztcblxuLyoqXG4gKiBUaGUgSFRUUCBkcml2ZXIgdHJhbnNwb3J0cyBsb2dzIHRvIHRoZSBjb25maWd1cmVkIHdlYiBBUEkgbG9nIHN0b3JlIHVzaW5nIHRoZVxuICogUE9TVCBIVFRQIHZlcmIuXG4gKlxuICogSXQgc2VuZHMgdGhlIGZvcm1hdHRlZCBsb2cgYW5kIHRoZSBsb2cgaW5jbHVkaW5nIHRoZSBvcHRpb25hbCBsb2cgcGF5bG9hZC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEx1bWJlcmphY2tIdHRwRHJpdmVyPFRQYXlsb2FkIGV4dGVuZHMgTHVtYmVyamFja0xvZ1BheWxvYWQgfCB2b2lkID0gdm9pZD5cbiAgaW1wbGVtZW50cyBMdW1iZXJqYWNrTG9nRHJpdmVyPFRQYXlsb2FkPiwgT25EZXN0cm95XG57XG4gIHN0YXRpYyByZWFkb25seSBkcml2ZXJJZGVudGlmaWVyID0gJ0x1bWJlcmphY2tIdHRwRHJpdmVyJztcblxuICByZWFkb25seSAjaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcmVhZG9ubHkgI25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICByZWFkb25seSAjc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICByZWFkb25seSBjb25maWcgPSBpbmplY3QobHVtYmVyamFja0h0dHBEcml2ZXJDb25maWdUb2tlbik7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgY3JpdGljYWwgbG9nIHRvIHRoZSBsb2cgc3RvcmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbTAgVGhlIGxvZyBhbmQgaXRzIHRleHQgcmVwcmVzZW50YXRpb24uXG4gICAqL1xuICBsb2dDcml0aWNhbCh7IGZvcm1hdHRlZExvZywgbG9nIH06IEx1bWJlcmphY2tMb2dEcml2ZXJMb2c8VFBheWxvYWQ+KTogdm9pZCB7XG4gICAgdGhpcy4jc2VuZExvZyhmb3JtYXR0ZWRMb2csIGxvZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBkZWJ1ZyBsb2cgdG8gdGhlIGxvZyBzdG9yZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtMCBUaGUgbG9nIGFuZCBpdHMgdGV4dCByZXByZXNlbnRhdGlvbi5cbiAgICovXG4gIGxvZ0RlYnVnKHsgZm9ybWF0dGVkTG9nLCBsb2cgfTogTHVtYmVyamFja0xvZ0RyaXZlckxvZzxUUGF5bG9hZD4pOiB2b2lkIHtcbiAgICB0aGlzLiNzZW5kTG9nKGZvcm1hdHRlZExvZywgbG9nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGVycm9yIGxvZyB0byB0aGUgbG9nIHN0b3JlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW0wIFRoZSBsb2cgYW5kIGl0cyB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKi9cbiAgbG9nRXJyb3IoeyBmb3JtYXR0ZWRMb2csIGxvZyB9OiBMdW1iZXJqYWNrTG9nRHJpdmVyTG9nPFRQYXlsb2FkPik6IHZvaWQge1xuICAgIHRoaXMuI3NlbmRMb2coZm9ybWF0dGVkTG9nLCBsb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgaW5mbyBsb2cgdG8gdGhlIGxvZyBzdG9yZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtMCBUaGUgbG9nIGFuZCBpdHMgdGV4dCByZXByZXNlbnRhdGlvbi5cbiAgICovXG4gIGxvZ0luZm8oeyBmb3JtYXR0ZWRMb2csIGxvZyB9OiBMdW1iZXJqYWNrTG9nRHJpdmVyTG9nPFRQYXlsb2FkPik6IHZvaWQge1xuICAgIHRoaXMuI3NlbmRMb2coZm9ybWF0dGVkTG9nLCBsb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgdHJhY2UgbG9nIHRvIHRoZSBsb2cgc3RvcmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbTAgVGhlIGxvZyBhbmQgaXRzIHRleHQgcmVwcmVzZW50YXRpb24uXG4gICAqL1xuICBsb2dUcmFjZSh7IGZvcm1hdHRlZExvZywgbG9nIH06IEx1bWJlcmphY2tMb2dEcml2ZXJMb2c8VFBheWxvYWQ+KTogdm9pZCB7XG4gICAgdGhpcy4jc2VuZExvZyhmb3JtYXR0ZWRMb2csIGxvZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCB3YXJuaW5nIGxvZyB0byB0aGUgbG9nIHN0b3JlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW0wIFRoZSBsb2cgYW5kIGl0cyB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKi9cbiAgbG9nV2FybmluZyh7IGZvcm1hdHRlZExvZywgbG9nIH06IEx1bWJlcmphY2tMb2dEcml2ZXJMb2c8VFBheWxvYWQ+KTogdm9pZCB7XG4gICAgdGhpcy4jc2VuZExvZyhmb3JtYXR0ZWRMb2csIGxvZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBsb2cgdG8gdGhlIGxvZyBzdG9yZS5cbiAgICpcbiAgICogVGhpcyBpcyBkb25lIG91dHNpZGUgb2YgdGhlIGBOZ1pvbmVgIGFzIHRoZXJlJ3Mgbm8gbmVlZCB0aGlzIHRvIHRyaWdnZXJcbiAgICogY2hhbmdlIGRldGVjdGlvbi5cbiAgICpcbiAgICogRmFpbGVkIEhUVFAgcmVxdWVzdHMgYXJlIHJldHJpZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmVkIHJldHJ5IG9wdGlvbnMuXG4gICAqXG4gICAqIFdoZW4gdGhlIGxhc3QgcmV0cnkgZmFpbHMsIHRoZSBkcml2ZXIgd2lsbCB0aHJvdyBhIGBMdW1iZXJqYWNrSHR0cERyaXZlckVycm9yYFxuICAgKiBhbmQgdGhlIGxvZyBiZWluZyBzZW50IGdldHMgZGlzY2FyZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybWF0dGVkTG9nIFRoZSBsb2cncyB0ZXh0IHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0gbG9nIFRoZSBsb2cuXG4gICAqL1xuICAjc2VuZExvZyhmb3JtYXR0ZWRMb2c6IHN0cmluZywgbG9nOiBMdW1iZXJqYWNrTG9nPFRQYXlsb2FkPik6IHZvaWQge1xuICAgIGNvbnN0IHsgb3JpZ2luLCByZXRyeU9wdGlvbnMsIHN0b3JlVXJsIH0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBodHRwTG9nOiBMdW1iZXJqYWNrSHR0cExvZzxUUGF5bG9hZD4gPSB7IGZvcm1hdHRlZExvZywgb3JpZ2luLCBsb2cgfTtcblxuICAgIHRoaXMuI25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy4jaHR0cFxuICAgICAgICAgIC5wb3N0PHZvaWQ+KHN0b3JlVXJsLCBodHRwTG9nKVxuICAgICAgICAgIC5waXBlKHJldHJ5V2l0aERlbGF5KHJldHJ5T3B0aW9ucy5tYXhSZXRyaWVzLCByZXRyeU9wdGlvbnMuZGVsYXlNcykpXG4gICAgICAgICAgLy8gSFRUUCByZXF1ZXN0cyBjb21wbGV0ZSBhZnRlciB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1bnN1YnNjcmliZS5cbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIE5vLW9wXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==