@huz-com/logger

Logger with environment based severity and separation of concerns

Usage no npm install needed!

<script type="module">
  import huzComLogger from 'https://cdn.skypack.dev/@huz-com/logger';
</script>

README

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 or npm 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
    });