feat: add EXIT log level

This commit is contained in:
Rainer Killinger
2020-03-10 10:54:09 +01:00
committed by Rainer Killinger
parent 3fb99ad896
commit edc6e6fad5
6 changed files with 923 additions and 932 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 StApps
* Copyright (C) 2019-2020 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
@@ -28,6 +28,21 @@ function hasStAppsLogLevel(something: object): something is { STAPPS_LOG_LEVEL:
return 'STAPPS_LOG_LEVEL' in something;
}
/**
* Check if something has property STAPPS_EXIT_LEVEL
*
* @param something Something to check
*/
// tslint:disable-next-line:completed-docs
function hasStAppsExitLevel(something: object): something is { STAPPS_EXIT_LEVEL: number; } {
return 'STAPPS_EXIT_LEVEL' in something;
}
/**
* A level descriptor for either log or exit level
*/
export type Level = 'LOG' | 'EXIT';
/**
* A log level
*/
@@ -101,34 +116,80 @@ export class Logger {
return transformedOutput;
}
/**
* Check if intended exit level is allowed in environment exit level
*
* @param exitLevel Log level to check
*/
private static checkExitLevel(exitLevel: LogLevel): boolean {
if (Logger.getLevel('EXIT') === 0) {
return false;
}
// tslint:disable-next-line:no-bitwise
return (Logger.getLevel('EXIT') & Logger.logLevelNumber(exitLevel)) === Logger.logLevelNumber(exitLevel);
}
/**
* Check if intended log level is allowed in environment log level
*
* @param logLevel Log level to check
*/
private static checkLogLevel(logLevel: LogLevel): boolean {
const logLevelNumber = Math.pow(Logger.binaryBase, Logger.logLevels.indexOf(logLevel));
// tslint:disable-next-line:no-bitwise
return (Logger.getLogLevel() & logLevelNumber) === logLevelNumber;
return (Logger.getLevel('LOG') & Logger.logLevelNumber(logLevel)) === Logger.logLevelNumber(logLevel);
}
/**
* Notify about exit and end process
*/
private static exit(): void {
if (isProductiveNodeEnvironment()) {
return;
}
// tslint:disable-next-line: no-console
console.error(Logger.applyTransformers('ERROR', `exiting as of used exit level ${Logger.getLevel('EXIT')} !`));
process.exit(-1);
}
/**
* Return log level from environment
*/
private static getLogLevel(): number {
if (isNodeEnvironment() && typeof process.env.STAPPS_LOG_LEVEL !== 'undefined') {
// Node.js environment exists
return parseInt(process.env.STAPPS_LOG_LEVEL, 10);
}
if (typeof window !== 'undefined' && hasStAppsLogLevel(window)) {
private static getLevel(level: Level): number {
if (typeof window !== 'undefined') {
// browser environment exists
return window.STAPPS_LOG_LEVEL;
if (hasStAppsLogLevel(window)) {
return window.STAPPS_LOG_LEVEL;
}
if (hasStAppsExitLevel(window)) {
return window.STAPPS_EXIT_LEVEL;
}
}
// Log everything
return Logger.logLevelSum;
const environmentLevel = level === 'LOG' ? process.env.STAPPS_LOG_LEVEL : process.env.STAPPS_EXIT_LEVEL;
if (isNodeEnvironment() && typeof environmentLevel !== 'undefined') {
// Node.js environment exists
return parseInt(environmentLevel, 10);
}
// Fallback to log everything, or not exiting
switch (level) {
case 'LOG':
return Logger.logLevelSum;
case 'EXIT':
return 0;
}
}
/**
* Get number of specific log level
*
* @param logLevel Log level to check
*/
private static logLevelNumber(logLevel: LogLevel): number {
return Math.pow(Logger.binaryBase, Logger.logLevels.indexOf(logLevel));
}
/**
@@ -153,6 +214,9 @@ export class Logger {
throw new Error(`Error couldn't be transported! Please set a transport or set ALLOW_NO_TRANSPORT='true'.`);
}
}
if (Logger.checkExitLevel('ERROR')) {
Logger.exit();
}
}
/**
@@ -167,6 +231,9 @@ export class Logger {
/* tslint:disable-next-line:no-console */
console.info(Logger.applyTransformers('INFO', Logger.stringifyArguments(...args)));
if (Logger.checkExitLevel('INFO')) {
Logger.exit();
}
}
/**
@@ -194,6 +261,9 @@ export class Logger {
/* tslint:disable-next-line:no-console */
console.log(Logger.applyTransformers('LOG', Logger.stringifyArguments(...args)));
if (Logger.checkExitLevel('LOG')) {
Logger.exit();
}
}
/**
@@ -208,6 +278,9 @@ export class Logger {
/* tslint:disable-next-line:no-console */
console.log(Logger.applyTransformers('OK', Logger.stringifyArguments(...args)));
if (Logger.checkExitLevel('OK')) {
Logger.exit();
}
}
/**
@@ -265,5 +338,8 @@ export class Logger {
/* tslint:disable-next-line:no-console */
console.warn(Logger.applyTransformers('WARN', Logger.stringifyArguments(...args)));
if (Logger.checkExitLevel('WARN')) {
Logger.exit();
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019 StApps
* Copyright (C) 2019-2020 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.