1.3.1 • Published 1 year ago

logitnow v1.3.1

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

LogItNow

A simple, yet powerful logger


Objective

Easily prints message logs with custom fields that can be specified for each message (or defined as default).

Builded to simplify the creation of log messages that can be easily searched by category, tag, message and object contents


Requirements

This library requires Node.js v12.x or higher.


Examples of Use

The main method to print a message is LogIt.now. It accepts four params:

LogIt.now(message: string, category: string, tag: string, xtra: object): void

Details

  • Message: the message that will be printed

    • If no message is defined, this method does nothing
  • Category: the category of this log message

    • Examples: INFO, DEBUG, WARN, ERROR
    • By default, this field's value is INFO
    • You can specify any string that suits your needs
    • If you use INFO, WARN, ERROR, etc, the respective console command will be used (console.info, console.warn, console.error, etc)
    • If you use some custom string, the console's command will be log (console.log)
  • Tag: some tag for this log message; it can be used to help filtering all the logs for a specific tag

    • By default, this field's value is null
  • Extra Info: Optional object that will be printed at end of the message


Simplest Use Case

To print a message, use the now method with just the message:

const LogIt = require("logitnow")

const log = new LogIt()

log.now('Testing the New Log System')

This will print on the terminal:

[INFO] Testing the New Log System 

Specifying a Category and a Tag

For each message, you can inform the category and the tag

const LogIt = require("logitnow")

const log = new LogIt()

log.now('Error Trying to Connect to the Database', 'ERROR', 'Main Application')

This will print on the terminal:

[ERROR] (MAIN APPLICATION) Error Trying to Connect to the Database 

Set a default Category and Tag

You can set a default value for a category and tag. These will be used if no category or tag is defined on the now method.

const LogIt = require("logitnow")

const log = new LogIt()

log.now('Using the default values')

// Setting a default category
log.setCategory('DEBUG')

log.now('Start the debug session')

// Setting a default tag
log.setTag('Best App Ever')

log.now('Creating new database connection')

// You still can specify a category and/or tag for each log message, without losing the defaults
log.now('This is not a problem that we will fix right now', 'ERROR')

// Using the *default*
log.now('In case of error, we will retry this ten times...')

These commands will print the following messages:

[INFO] Using the default values 
[DEBUG] Start the debug session 
[DEBUG] (BEST APP EVER) Creating new database connection 
[ERROR] (BEST APP EVER) This is not a problem that we will fix right now 
[DEBUG] (BEST APP EVER) In case of error, we will retry this ten times... 

Using the Flat Format

If you want the output to be printed on a single line, you can set this using setFlat's method.

Consider the following object:

const customer = {
  name: 'John',
  code: 23,
  list: [
    { item: 'Orange Juice', quantity: 3, price: '23.99' },
    { item: 'Chips', quantity: 2, price: '12.49' },
  ]
}

If you log this object using the default values:

...
  log.now('Shop Items', 0, 0, customer)
...

This is what it will be printed on terminal:

[INFO] Shopping Items 
{
  "name": "John",
  "code": 23,
  "list": [
    {
      "item": "Orange Juice",
      "quantity": 3,
      "price": "23.99"
    },
    {
      "item": "Chips",
      "quantity": 2,
      "price": "12.49"
    }
  ]
}

It's more ease to read, but not always the best option. Using multi-lines for each message can produce bad results for others systems (like Kibana). If you need that each log message uses only one line, you can either:

  • Set isFlat as default
  • Call the flat method, that accepts the same arguments as the method now (more details below)

Example setting TRUE to isFlat

const log = new (require('./index'))()
log.setFlat(true)

const customer = {
  name: 'John',
  code: 23,
  list: [
    { item: 'Orange Juice', quantity: 3, price: '23.99' },
    { item: 'Chips', quantity: 2, price: '12.49' },
  ]
}

log.now('Shopping Items', 0, 0, customer)

This will be the result:

[INFO] Shopping Items {"name":"John","code":23,"list":[{"item":"Orange Juice","quantity":3,"price":"23.99"},{"item":"Chips","quantity":2,"price":"12.49"}]}

You can also ignore the defaults, using two methods (note that both uses the same parameters of LogIt.now):

LogIt.flat(message: string, category: string, tag: string, xtra: object): void
LogIt.pretty(message: string, category: string, tag: string, xtra: object): void

LogIt.flat will print the message in only one line, despite the default; and LogIt.pretty will print it in a more human friendly fashion, also despite the default.


Reset to Defaults

You can reset category's value, tag's value and isFlat's flag calling these methods without any parameter:

const LogIt = require("logitnow")

const log = new LogIt()
...
log.setCategory()
log.setTag()
log.setFlat()
...

Include an Object with Extra Info

You can create an object, or use one already created, to be assigned on the message.

const LogIt = require("logitnow")

const log = new LogIt()

log.now('Error trying to connect to remote server', 'ERROR', null, { endpoint: 'test.com/endpoint', timestamp: new Date(), releaseCode: '0.01a'})

This will print the following message:

[ERROR] Error trying to connect to remote server 
{
    "endpoint": "test.com/endpoint",
    "timestamp": "2022-03-21T16:24:15.737Z",
    "releaseCode": "0.01a"
}

Include a Timestamp

To include the timestamp before each log message, call the method showTimestamp() with true as argument.

const log = new (require("logitnow"))()

log.now('Testing with default values')
log.includeTimestamp(true)
log.now('Now with timestamp')
log.includeTimestamp(false)
log.now('Timestamp deactivated')

This will print the following messages on the terminal:

[INFO] Testing with default values 
{ 2022-03-28T17:44:59.864Z } [INFO] Now with timestamp 
[INFO] Timestamp deactivated

To deactivate, use the same method, but passing false as argument.


Restrict the Display of Log Messages

It's possible to publish the Log's messages only if a specific NODE_ENV is set.

For example, if you want to print all the messages when in DEVELOPMENT environment, set the NODE_ENV environment to development and set the following command:

log.setOnlyEnvironment('development')

To reset, so that all the messages will be printed again for now on, use the same method, but passing null as argument.

log.setOnlyEnvironment('development')

You can set/unset this at any time, turning on/off if the messages will or will not be printed.

Always Print Error Messages

If you want to always print error messagens, despite how setOnlyEnvironment is set, set true to setAlwaysPrintOnErrors:

log.setAlwaysPrintOnErrors(true)

To deactivate this, call the same method, but using false as parameter.

Ignore All Environment Filters

If you need to ignore all environment filters, printing all messages despite the environment, set 1 as IGNORE_ENVIRONMENT_FILTERS environment's variable. Any value different of 1 will be considered false.


History

v1.2.1: New features: added support to always print on terminal when an "error" occurs; you can now ignore all environment filters (all messages will be printed); Fix: tag will no be printed as UPPERCASE anymore

v1.2.0: Added support to print the log messages only if the project is running with a especific environment variable for NODE_ENV

v1.1.0: Added support to print the message using flat format

v1.0.6: Added support to print the current date and time at the beginning of the message

v1.0.1~v1.0.5: Minor fixes

v1.0: Initial Release

1.3.1

1 year ago

1.3.0

1 year ago

1.2.0

2 years ago

1.1.0

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago