@the-hw-app/logger
Version:
A logger made for internal use by The Homework App.
197 lines (196 loc) • 4.9 kB
TypeScript
/**
* @name MiddlewareArgs
* @description Stores the arguments that are passed to the middleware.
* @interface
*/
declare type MiddlewareArgs = {
swaggerSpecs: any;
};
/**
* @name LogLevel
* @description Stores the log levels that can be used in the application.
* @enum {string}
* @readonly
*/
declare enum LogLevel {
emergency = 0,
alert = 1,
critical = 2,
error = 3,
warning = 4,
notice = 5,
info = 6,
debug = 7
}
/**
* @name logLevel
* @description The log level that is used in the application in the form of types. Can be used as a type.
*/
declare type logLevel = keyof typeof LogLevel;
/**
* @name LogArgs
* @description Stores the argument structure that are passed to the log(...).
* @type
*/
declare type LogArgs = {
level: logLevel;
message: string;
[key: string | number]: any;
};
/**
* @class Logger
* @description Serves as a wrapper for the graylog2 library and console logging.
* @author [KryptoBlack] <https://github.com/KryptoBlack>
* @version 1.0.0
* @license MIT
* @example
* import { Logger } from 'logger';
* let logger: Logger = new Logger("xyz-service");
* logger.info('500 Server Failed', { status: 500 });
* logger.close();
* @todo Add a config to allow debug level logging to use graylog at production/staging environment.
* @todo Handle Invalid environment in a better way.
*/
declare class Logger {
private readonly gelfLogger;
private NODE_ENV;
/**
* @name constructor
* @description This is the constructor for the Logger class.
* @param hostname {string}
* @param env {number}
* @memberof Logger
*/
constructor(o: {
hostname: string;
host: string;
port: number;
env?: string;
});
/**
* @name log
* @description This function is used to log messages by passing the level.
* @param level
* @param message
* @param meta
* @returns void
* @memberof Logger
* @example
* @todo better way to handle keyword args.
* import { Logger } from 'logger';
* let logger: Logger = new Logger("xyz-service");
* logger.log(LogLevel.info, '500 Server Failed', { status: 500 });
* logger.close();
*/
log({ level, message, ...meta }: LogArgs): void;
/**
* @name serve
* @description Serves middleware service for the logger.
* @param {MiddlewareArgs} o
* @returns {any}
* @memberof Logger
* @example
* @todo add a strict type for return value.
* @todo handle validation of key level in a better way.
* import { Logger } from 'logger';
*
* ...
*
* let logger: Logger = new Logger("xyz-service");
* const options = {
* definition: {
* openapi: "3.0.0",
* info: { ... },
* ...
* };
* const swaggerSpecs: object = swaggerJsdoc(options);
* app.use(logger.serve({ swaggerSpecs: swaggerSpecs }));
*
* ...
*
*/
serve(o: MiddlewareArgs): any;
/**
*
* @name console
* @description This function is used to return console logger by level.
* @memberof Logger
* @param level
*/
private console;
/**
* @param level {logLevel}
* @param message {string}
* @param meta {any}
* @description This function is used to decide what to call the graylog function or console function.
* @private
* @returns void
* @memberof Logger
*/
private _log;
/**
* @name info
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
info(message: string, ...meta: any): void;
/**
* @name error
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
error(message: string, ...meta: any): void;
/**
* @name emergency
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
emergency(message: string, ...meta: any): void;
/**
* @name alert
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
alert(message: string, ...meta: any): void;
/**
* @name critical
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
critical(message: string, ...meta: any): void;
/**
* @name warning
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
warning(message: string, ...meta: any): void;
/**
* @name notice
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
notice(message: string, ...meta: any): void;
/**
* @name debug
* @param message
* @param meta
* @returns void
* @memberof Logger
*/
debug(message: string, ...meta: any): void;
}
export { Logger, LogLevel, };