@ng-log/log4a
Version:
A powerful and customizable logging library for Angular application.
1 lines • 26.8 kB
Source Map (JSON)
{"version":3,"file":"ng-log-log4a.mjs","sources":["../../../../projects/ng-log/log4a/src/lib/log4a.model.ts","../../../../projects/ng-log/log4a/src/lib/core-appender.service.ts","../../../../projects/ng-log/log4a/src/lib/appender-impl.service.ts","../../../../projects/ng-log/log4a/src/lib/log4a.service.ts","../../../../projects/ng-log/log4a/src/lib/log-config/log-config.component.ts","../../../../projects/ng-log/log4a/src/lib/log-config/log-config.component.html","../../../../projects/ng-log/log4a/src/lib/log4a.module.ts","../../../../projects/ng-log/log4a/src/public_api.ts","../../../../projects/ng-log/log4a/src/ng-log-log4a.ts"],"sourcesContent":["import { Observable } from \"rxjs\";\nimport { LogEntry } from \"./log4a.service\";\n\nexport type LogAppenderConfig = {\n appenderName: string;\n location: string;\n enable: boolean;\n};\n\nexport abstract class AbstractLogger {\n location!: string;\n abstract log(record: LogEntry): Observable<boolean>;\n abstract clear(): Observable<boolean>;\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { catchError, Observable, throwError } from 'rxjs';\nimport { of } from 'rxjs/internal/observable/of';\nimport { LogEntry } from './log4a.service';\nimport { AbstractLogger } from './log4a.model';\n\nexport class ConsoleAppender extends AbstractLogger {\n log(entry: LogEntry): Observable<boolean> {\n entry.buildLogString();\n return of(true);\n }\n clear(): Observable<boolean> {\n console.clear();\n return of(true);\n }\n}\n\nexport class LocalStorageAppender extends AbstractLogger {\n constructor() {\n super();\n this.location = 'logging';\n }\n\n log(entry: LogEntry): Observable<boolean> {\n let ret = false;\n let values: LogEntry[];\n\n try {\n const location = localStorage.getItem(this.location) ?? '';\n values = JSON.parse(location) || [];\n values.push(entry);\n localStorage.setItem(this.location, JSON.stringify(values));\n ret = true;\n } catch (e) {\n console.error(e);\n }\n return of(ret);\n }\n\n clear(): Observable<boolean> {\n localStorage.removeItem(this.location);\n return of(true);\n }\n}\n\nexport class WebApiAppender extends AbstractLogger {\n constructor(private http: HttpClient) {\n super();\n this.location = 'api/logging';\n }\n\n log(entry: LogEntry): Observable<boolean> {\n // let headers = new Headers({ 'Content-Type': 'Content-Type' });\n const options = new HttpHeaders().set('Content-Type', 'application/json');\n this.http\n .post<boolean>(this.location, entry, { headers: options }).pipe(catchError((error: any, caught: Observable<any>): Observable<any> => {\n console.error('There was an error!', error);\n // after handling error, return a new observable \n // that doesn't emit any values and completes\n return of();\n }));\n return of(true);\n }\n\n clear(): Observable<boolean> {\n // TODO: Call Web API to clear all values\n return of(true);\n }\n\n private handleErrors(error: any): Observable<any> {\n const errors: string[] = [];\n let msg = '';\n\n msg = 'Status: ' + error.status;\n msg += ' - Status Text: ' + error.statusText;\n if (error.json()) {\n msg += ' - Exception Message: ' + error.json().exceptionMessage;\n }\n errors.push(msg);\n\n console.error('An error occurred', errors);\n\n return throwError(errors);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { LocalStorageAppender, ConsoleAppender, WebApiAppender } from './core-appender.service';\nimport { HttpClient } from '@angular/common/http';\nimport { AbstractLogger, LogAppenderConfig } from './log4a.model';\n\n@Injectable()\nexport class AppenderService {\n\n appenders: AbstractLogger[] = [];\n\n constructor(private http: HttpClient) {\n console.log('AppenderService Initiated');\n }\n\n loadConfig(logConfig: LogAppenderConfig[]) {\n let appender = {} as AbstractLogger;\n for (const pub of logConfig.filter(p => p.enable)) {\n switch (pub.appenderName.toLowerCase()) {\n case 'console':\n appender = new ConsoleAppender();\n break;\n case 'localstorage':\n appender = new LocalStorageAppender();\n break;\n case 'serverapi':\n appender = new WebApiAppender(this.http);\n break;\n\n }\n // Set location of logging\n appender.location = pub.location;\n // Add publisher to array\n this.appenders.push(appender);\n\n }\n }\n\n loadRuntimeConfig(): void {\n let appender = {} as AbstractLogger;\n console.log(this.getQueryParams('logger-option'));\n switch (this.getQueryParams('logger-option')) {\n case 'console':\n appender = new ConsoleAppender();\n break;\n case 'localstorage':\n appender = new LocalStorageAppender();\n break;\n case 'serverapi':\n appender = new WebApiAppender(this.http);\n break;\n }\n this.appenders.push(appender);\n }\n\n public getQueryParams(param: string): string {\n const href = location.href;\n const reg = new RegExp('[?&]' + param + '=([^&#]*)', 'i');\n const string = reg.exec(href);\n return string ? string[1] : '';\n }\n\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport { AppenderService } from './appender-impl.service';\nimport { AbstractLogger, LogAppenderConfig } from './log4a.model';\nconst PUBLISHERS_FILE = 'assets/logging-config.json';\n\n@Injectable()\nexport class Log4a {\n abstractAppenders: AbstractLogger[];\n // tslint:disable-next-line: no-use-before-declare\n level: LogLevel = LogLevel.All;\n logWithDate = true;\n constructor(\n public appenderService: AppenderService,\n public http: HttpClient\n ) {\n this.abstractAppenders = appenderService.appenders;\n }\n\n async loadConfigs() {\n const loggerOption = this.appenderService.getQueryParams(\n 'logger-option'\n );\n if (loggerOption !== '') {\n this.appenderService.loadRuntimeConfig();\n } else {\n this.http\n .get<LogAppenderConfig[]>(PUBLISHERS_FILE).subscribe((res)=> {\n this.appenderService.loadConfig(res);\n })\n }\n }\n\n debug(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.Debug, optionalParams);\n }\n\n info(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.Info, optionalParams);\n }\n\n warn(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.Warn, optionalParams);\n }\n\n error(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.Error, optionalParams);\n }\n\n fatal(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.Fatal, optionalParams);\n }\n\n log(msg: string, ...optionalParams: any[]) {\n // tslint:disable-next-line: no-use-before-declare\n this.writeToLog(msg, LogLevel.All, optionalParams);\n }\n\n clear(): void {\n for (const logger of this.abstractAppenders) {\n logger.clear().subscribe((response: any) => console.log(response));\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n let ret = false;\n\n if (\n // tslint:disable-next-line: no-use-before-declare\n (level >= this.level && level !== LogLevel.Off) ||\n // tslint:disable-next-line: no-use-before-declare\n this.level === LogLevel.All\n ) {\n ret = true;\n }\n\n return ret;\n }\n\n private writeToLog(msg: string, level: LogLevel, params: any[]) {\n if (this.shouldLog(level)) {\n // Declare variables\n // tslint:disable-next-line: no-use-before-declare\n const entry: LogEntry = new LogEntry();\n\n // Build Log Entry\n entry.message = msg;\n entry.level = level;\n entry.extraInfo = params;\n entry.logWithDate = this.logWithDate;\n\n for (const logger of this.abstractAppenders) {\n logger.log(entry);\n // .subscribe(response => console.log(response));\n }\n }\n }\n}\n\nexport enum LogLevel {\n All = 0,\n Debug = 1,\n Info = 2,\n Warn = 3,\n Error = 4,\n Fatal = 5,\n Off = 6\n}\n\nexport class LogEntry {\n // Public Properties\n entryDate: Date = new Date();\n message = '';\n level: LogLevel = LogLevel.Debug;\n extraInfo: any[] = [];\n logWithDate = true;\n\n // **************\n // Public Methods\n // **************\n buildLogString(): void {\n let value = '';\n\n if (this.logWithDate) {\n value = new Date() + '';\n }\n // value += \"Type: \" + LogLevel[this.level];\n value += ' - Message: ' + this.message;\n if (this.extraInfo.length) {\n value += ' - Extra Info: ' + this.formatParams(this.extraInfo);\n }\n\n switch (LogLevel[this.level]) {\n case 'Debug':\n // tslint:disable-next-line: no-console\n console.debug(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n 'background: white;border-bottom: 1px solid blue; font-weight: 900;color:blue'\n );\n break;\n case 'Info':\n // tslint:disable-next-line: no-console\n console.info(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n 'background: white;border-bottom:1px solid blue; font-weight: 900;color:blue'\n );\n break;\n case 'Warn':\n console.warn(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: black; background: orange; color: white; display: block; font-weight: bold;',\n 'background: white;border-bottom: 1px solid orange; font-weight: 900; '\n );\n break;\n case 'Error':\n console.error(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: white; background: red; color: white; display: block; font-weight: bold;',\n 'background: ;border-bottom: 1px solid red; font-weight: 900; color:red'\n );\n break;\n case 'Fatal':\n console.error(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: white; background: red; color: white; display: block; font-weight: bold;',\n 'background: ;border-bottom: 1px solid red; font-weight: 900; color:red'\n );\n break;\n case 'All':\n // tslint:disable-next-line: no-console\n console.info(\n '%c Type: [' + LogLevel[this.level] + ']%c' + value,\n ' border-bottom-color: blue; background: blue; color: white; display: block; font-weight: bold;',\n 'background: white;border-bottom: 1px solid blue; font-weight: 900;color:blue'\n );\n break;\n }\n\n // return value;\n }\n\n // ***************\n // Private Methods\n // ***************\n private formatParams(params: any[]): string {\n let ret: string = params.join(',');\n\n // Is there at least one object in the array?\n if (params.some(p => typeof p === 'object')) {\n ret = '';\n // Build comma-delimited string\n for (const item of params) {\n ret += JSON.stringify(item) + ',';\n }\n }\n\n return ret;\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport { Log4a, LogLevel } from '../log4a.service';\n\n@Component({\n selector: 'log-config',\n templateUrl: './log-config.component.html',\n styleUrls: ['./log-config.component.css']\n})\nexport class LogConfigComponent implements OnInit {\n isChecked = true;\n\n constructor(public logger: Log4a) {}\n\n ngOnInit() {}\n\n enableLog(): void {\n this.isChecked = !this.isChecked;\n this.logger.level = this.isChecked ? LogLevel.All : LogLevel.Off\n }\n\n enableDate(): void {\n this.logger.logWithDate = !this.logger.logWithDate;\n }\n\n setLogLevel(level: string): void {\n switch (level) {\n case 'Debug':\n this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Debug;\n break;\n case 'Info':\n this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Info;\n break;\n case 'Warn':\n this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Warn;\n break;\n case 'Error':\n this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.Error;\n break;\n default:\n this.logger.level = (this.logger.level === LogLevel.Off) ? LogLevel.Off : LogLevel.All;\n break;\n }\n }\n\n logmsg(){\n this.logger.debug('test')\n }\n}\n","<form (ngSubmit) = \"false\">\n <h1>Enable/Disable Log :</h1>\n <label class=\"switch\">\n\n <input type=\"checkbox\" [checked]='isChecked' (click) = \"enableLog()\">\n <span class=\"slider round\" ></span>\n </label>\n\n <!-- Rounded switch -->\n <h1>Enable Date :</h1>\n <label class=\"switch\">\n\n <input type=\"checkbox\" checked (click) = \"enableDate()\">\n <span class=\"slider round\"></span>\n </label>\n\n\n<br>\n<br>\n<br>\n<fieldset >\n <legend>Log Level :</legend>\n\n <div>\n <input type=\"radio\" id=\"debug\" name=\"log\" value=\"Debug\" checked (change) = \"setLogLevel('Debug')\"/>\n <label for=\"debug\">Debug</label>\n </div>\n\n <div>\n <input type=\"radio\" id=\"info\" name=\"log\" value=\"Info\" (change) = \"setLogLevel('Info')\"/>\n <label for=\"info\">Info</label>\n </div>\n\n <div>\n <input type=\"radio\" id=\"warn\" name=\"log\" value=\"warn\" (change) = \"setLogLevel('Warn')\"/>\n <label for=\"warn\">Warn</label>\n </div>\n\n <div>\n <input type=\"radio\" id=\"error\" name=\"log\" value=\"Error\" (change) = \"setLogLevel('Error')\"/>\n <label for=\"error\">Error</label>\n </div>\n\n <div>\n <input type=\"radio\" id=\"all\" name=\"log\" value=\"All\" (change) = \"setLogLevel('All')\"/>\n <label for=\"all\">All</label>\n </div>\n</fieldset>\n\n\n<br>\n\n<input type=\"button\" (click) = \"logger.debug('test')\" value=\"Debug Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.info('test')\" value=\"Info Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.warn('test')\" value=\"Warn Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.error('test')\" value=\"Error Test\"/><br><br>\n<input type=\"button\" (click) = \"logger.log('test')\" value=\"All Test\"/><br><br>\n\n\n\n","import { NgModule } from '@angular/core';\nimport { LogConfigComponent } from './log-config/log-config.component';\n\n\n@NgModule({\n declarations: [LogConfigComponent],\n imports: [\n ],\n exports: [LogConfigComponent]\n})\nexport class Log4aModule { }\n","/*\n * Public API Surface of log4a\n */\nexport * from './lib/log4a.service';\nexport * from './lib/log4a.module';\nexport * from './lib/appender-impl.service';\nexport * from './lib/core-appender.service';\nexport * from './lib/log-config/log-config.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.AppenderService","i2","i1.Log4a"],"mappings":"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"}