mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-19 16:13:06 +00:00
feat: add EXIT log level
This commit is contained in:
committed by
Rainer Killinger
parent
3fb99ad896
commit
edc6e6fad5
104
src/logger.ts
104
src/logger.ts
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user