Huz.Com > Component > Logger
- Logger with environment based severity and separation of concerns
Standards
- Language:
TS
- Eslint:
Yes
- Static Code Analysis:
Yes
IntelliJ Code Inspections - DDD - Document Driven:
Yes
- EDD - Exception Driven:
Yes
- TDD - Test Driven:
Yes
go to test folder - Standards Complied: Huz Standards
Commands
-
npm run clear
// clears "dist" folder -
npm run lint
// runs eslint for static code analysis -
npm run test
// runs test files in "test" folder -
npm run build
// builds JS files at "dist" folder -
npm publish
ornpm run publix
// publishes "dist" folder to npm
Install
npm i @huz-com/logger
Structure
-
logger.
severity
(...names: Array).concern
(data: unknown); -
severity:
ifLocal
ifDevelopment
ifTesting
ifStaging
ifProduction
ifPriorityOk
ifEnvironmentOk
-
concern:
error
endpoint
info
request
response
SEVERITY / PRIORITY
//environments: prod, stage, test, dev
//priorities: prod:0, stage: 1, test:2, dev: 3, isLocal:4
const {logger} = require('@huz-com/logger');
// --- EASY
// runs if registry.isLocal:true (not important environment)
logger.ifLocal('your description', 'sub-description');
// runs if registry.environment is dev
logger.ifDevelopment('your description', 'sub-description');
// runs if registry.environment istest or dev
logger.ifTesting('your description', 'sub-description');
// runs if registry.environment is stage or test or dev
logger.ifStaging('your description', 'sub-description');
// runs in all conditions
logger.ifProduction('your description', 'sub-description');
// --- DYNAMIC
// runs if given environment is fixed current environment
logger.ifEnvironmentOk('dev', 'your description', 'sub-description');
// runs if given priority is fixed current environment's priority
logger.ifPriorityOk(3, 'your description', 'sub-description');
SEPARATION OF CONCERNS
//error, endpoint, info, request, response
const {logger} = require('@huz-com/logger');
// --- error
// To log errors
try {
// ...
} catch (e) {
// it logs if registry.isLocal, else ignore it
logger.ifLocal('your description', 'sub-description')
.error(e);
}
// --- info
// to log any general data
// it logs if registry.environment is dev or test
logger.ifTesting('some log')
.info('any data with any type');
// --- endpoint
// to log endpoint calls
// it logs if registry.environment is dev
logger.ifDevelopment('game get')
.endpoint({
method: 'GET', // optional, httpMethodEnum
url: '/v1/games/4555', // string.Folder
duration: 34 // optional, Integer
});
// --- request
// to log remote api requesting (ie: before axios call)
// it logs if registry.environment is stage, test, dev
logger.ifStaging('call some api')
.request({
method: 'GET', // optional, httpMethodEnum
url: 'https://domain.com/v1/some-path', // optional, url of api
query: {key1: 'value1'}, // optional, query parameters
headers: {key1: 'value1'}, // optional, outgoing headers
payload: 'any content or json object', // optional, outgoing payload
config: {}, // optional, other request configs
});
// --- response
// to log remote api responsed successively (ie: after axios call)
// it logs if registry.environment is stage, test, dev, prod
logger.ifProduction('response of an api')
.response({
status: 200, // optional, incoming http status
body: 'any content or json object', // optional, incoming body
headers: {key1: 'value1'}, // optional, incoming headers
});