UNPKG

@ng-log/log4a

Version:

A powerful and customizable logging library for Angular application.

184 lines (138 loc) 5.23 kB
[![npm version](https://badge.fury.io/js/%40ng-log%2Flog4a.svg)](https://badge.fury.io/js/%40ng-log%2Flog4a) [![Build Status](https://travis-ci.org/moneybharathe/Log4a.svg?branch=master)](https://travis-ci.org/moneybharathe/Log4a) # Log4A : Logger library for Angular 15+ > A powerful and customizable logging library for Angular application. ### New Features! - Pretty print log messages with timestamp, file name, method name, line number, path or call stack. - Support user-defined logging levels. - Support console, local-storage and server-side appenders. - Support file based configuration(logging-config.json). - Support runtime configuration through query param. - GUI supports for enable/disable logs, timestamp, setting user-defind log level at runtime. ## Installation Install the dependencies and devDependencies and start the server. #### Prerequisite -HttpClientModule -rxjs latest ```sh $ npm install @ng-log/log4a ``` ## Configuration - ***FileBased Configuration*** - ***Runtime Configuration*** ## Setup for both File based and Runtime configuration. #### Step1: > Create a json file in "assets/logging-config.json" location with below format. ```json [ { "appenderName": "console", "location": "", "enable": true }, { "appenderName": "localstorage", "location": "logging", "enable": false }, { "appenderName": "serverapi", "location": "/api/log", "enable": false } ] ``` #### Step2: > Add HttpClientModule, Log4aModule, Log4a and AppenderService ```typescript /*Should add APP_INITIALIZER, HttpClientModule, Log4a libraries provided below */ import { NgModule, APP_INITIALIZER } from '@angular/core'; import { HttpClientModule } from '@angular/common/http'; import { Log4aModule, AppenderService, Log4a } from '@ng-log/log4a'; @NgModule({ declarations: [AppComponent, ChildComponent], imports: [HttpClientModule, Log4aModule, BrowserModule], providers: [ AppenderService, Log4a, { provide: APP_INITIALIZER, useFactory: (config: Log4a) => () => config.loadConfigs(), deps: [Log4a], multi: true } ], bootstrap: [AppComponent] }) export class AppModule { } ``` #### Final step : > You can inject Log4a service to avail logger service. ```typescript constructor(public logger: Log4A) { /*you can pass any data type like String, Object type and Arrays */ this.logger.log('Hello Angular'); } ``` **And you will see the message in the console of browser:** ![](img/alllogs.png) **you will see the message in the Local storage area of browser:** ![](img/localstorage.png) ## Support user-defined logging levels. ```typescript this.logger.debug("debug logs"); this.logger.warn("warn logs"); this.logger.error("error logs"); this.logger.info("info logs"); this.logger.log("logs"); ``` ## Support Multi Logging system in ***FileBased Configuration***. Inspired from java ***log4j***; API provides three appenders. > Console Appender - Console appender is a very simple service that displays logs data to the console window. > Local Storage Appender - It can store data locally with in the user’s browsers. > Server logs - A server logs can store the log information from all clients in one location. you can configure one or more appenders by setting the below flag as true. ``` { "appenderName": "console", "location": "",/*Leave it as empty; should not change this value*/ "enable": true /*You can enable/disable this flag to use the log system*/ }, { "appenderName": "localstorage", "location": "logging",/*By default location name is logging; location property is customizable*/ "enable": false }, { "appenderName": "serverapi", "location": "/api/log", /*By default location name is '/api/log'; location property is customizable*/ "enable": false } ``` ## Runtime Configuration - You can configure the logger via query parameter. - Support changing the logger system on runtime, no need to restart the server, ``` javascript Console Appender : http://<apphost>:<port>/?logger-option=console Local Storage Appender : http://<apphost>:<port>/?logger-option=localstorage Server log Appender : http://<apphost>:<port>/?logger-option=webapi ``` ***Note: If you are not passing any query param it will take configuration from logging-config.json file*** ## UI component for Managing Logs - Enable/Disable Logs through UI. - Enable/Disable Timestamp. - Setting User-defined log levels. ### Setup of UI Components ```javascript import { Log4aModule} from '@ng-log/log4a'; /**use below selector to use log ui components:**/ <log-config></log-config> ``` **you can use user interface to enable/disable logs, setting Log levels** ![](img/gui-component.png) ### Errors and Solutions > main.ts:12 NullInjectorError: R3InjectorError[ApplicationModule -> ApplicationRef -> ApplicationInitStatus -> InjectionToken Application Initializer -> [object Object] -> Log4a -> AppenderService -> HttpClient -> HttpClient -> HttpClient]: NullInjectorError: No provider for HttpClient! > Solutions : Please import HttpClient Module in your Appmodule / Bootstrap Module.