A small lightweight logging hook with some basic styling
This commit is contained in:
@ -1,13 +1,13 @@
|
|||||||
import { useRef } from 'react';
|
import { useRef } from 'react';
|
||||||
import Logging from '../library/Logging';
|
import Logging, { ILoggingOptions } from '../library/Logging';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A hook for a simple logging library.
|
* A hook for a simple logging library.
|
||||||
* @param namespace string that will be displayed after the timestamp and before the log level as [namespace].
|
* @param namespace string that will be displayed after the timestamp and before the log level as [namespace].
|
||||||
* @returns object of type Logging
|
* @returns object of type Logging
|
||||||
*/
|
*/
|
||||||
export const useLogging = (namespace?: string): [Logging] => {
|
export const useLogging = (options?: ILoggingOptions): [Logging] => {
|
||||||
const { current: logging } = useRef(new Logging(namespace));
|
const { current: logging } = useRef(new Logging(options));
|
||||||
|
|
||||||
return [logging];
|
return [logging];
|
||||||
};
|
};
|
||||||
|
@ -1,31 +1,53 @@
|
|||||||
const DEBUG = 'DEBUG';
|
export const DEBUG = 'DEBUG';
|
||||||
const INFO = 'INFO';
|
export const INFO = 'INFO';
|
||||||
const WARN = 'WARN';
|
export const WARN = 'WARN';
|
||||||
const ERROR = 'ERROR';
|
export const ERROR = 'ERROR';
|
||||||
|
|
||||||
|
export interface ILoggingOptions {
|
||||||
|
namespace?: string;
|
||||||
|
debug?: boolean;
|
||||||
|
applyStyles?: boolean;
|
||||||
|
styles?: { [key: string]: string };
|
||||||
|
}
|
||||||
|
|
||||||
export class Logging {
|
export class Logging {
|
||||||
private namespace = 'Default';
|
private namespace: string;
|
||||||
|
private applyStyles: boolean;
|
||||||
|
private environment: string;
|
||||||
|
|
||||||
constructor(namespace?: string) {
|
private styles: { [key: string]: string } = {
|
||||||
if (namespace) this.namespace = namespace;
|
DEBUG: 'display: inline-block; background-color: Blue; color: white; font-weight: bold; padding: 3px 7px 3px 7px; border-radius: 3px;',
|
||||||
|
INFO: 'display: inline-block; background-color: Green; color: black; font-weight: bold; padding: 3px 7px 3px 7px; border-radius: 3px;',
|
||||||
|
WARN: 'display: inline-block; background-color: gold; color: black; font-weight: bold; padding: 3px 7px 3px 7px; border-radius: 3px;',
|
||||||
|
ERROR: 'display: inline-block; background-color: Red; color: black; font-weight: bold; padding: 3px 7px 3px 7px; border-radius: 3px;'
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(options?: ILoggingOptions) {
|
||||||
|
this.namespace = options?.namespace || 'Default';
|
||||||
|
this.applyStyles = options?.applyStyles || false;
|
||||||
|
this.environment = process.env.NODE_ENV || 'development';
|
||||||
|
|
||||||
|
if (options?.styles && this.applyStyles) {
|
||||||
|
for (let key in options.styles) {
|
||||||
|
if (this.styles[key]) this.styles[key] = options.styles[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public log = (key: string, obj: any, ...objs: any[]) => {
|
public log = (key: string, obj: any, ...objs: any[]) => {
|
||||||
console.info(`[${this.getDate()}] [${this.namespace}] [${key}] %c${obj}`, ...objs);
|
if (this.environment === 'production') return;
|
||||||
|
|
||||||
|
if (this.applyStyles) {
|
||||||
|
console.log(`[${new Date().toISOString()}] [${this.namespace}] %c[${key}] ${obj}`, this.styles[key], ...objs);
|
||||||
|
} else {
|
||||||
|
console.log(`[${new Date().toISOString()}] [${this.namespace}] [${key}] ${obj}`, ...objs);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public debug = (obj: any, ...objs: any[]) => this.log(DEBUG, obj, objs);
|
public debug = (obj: any, ...objs: any[]) => this.log(DEBUG, obj, ...objs);
|
||||||
public info = (obj: any, ...objs: any[]) => this.log(INFO, obj, objs);
|
public info = (obj: any, ...objs: any[]) => this.log(INFO, obj, ...objs);
|
||||||
public warn = (obj: any, ...objs: any[]) => this.log(WARN, obj, objs);
|
public warn = (obj: any, ...objs: any[]) => this.log(WARN, obj, ...objs);
|
||||||
public error = (obj: any, ...objs: any[]) => this.log(ERROR, obj, objs);
|
public error = (obj: any, ...objs: any[]) => this.log(ERROR, obj, ...objs);
|
||||||
|
|
||||||
public getDate = () => {
|
|
||||||
return new Date().toISOString();
|
|
||||||
};
|
|
||||||
|
|
||||||
public setNamespace = (namespace: string) => {
|
|
||||||
this.namespace = namespace;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Logging;
|
export default Logging;
|
||||||
|
Reference in New Issue
Block a user