@autometa/logging
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

Logging & Console

This package provides a GroupLogger class which enables console.group like behavior. Useful for debugging, or when tests will be run consecutively see Async.

The console module can also be overwritten to use GroupLogger internally and reenable console groups (which are disabled in node due to its Async nature) globally in your project.

Grouping can be enabled by calling useConsoleGroups, and disabled with disableConsoleGroups.

To start a console group call console.group('some title here'), and to end it call console.groupEnd().

For example take the following code:

const logger = new GroupLogger()
logger.group('Outer Group');
logger.group('Inner Group');
logger.log('Http Request Sent');
logger.log('Http Response Received');  
logger.groupEnd();
logger.groupEnd();

or with console groups enabled

console.group('Outer Group');
console.group('Inner Group');
console.log('Http Request Sent');
console.log('Http Response Received');  
console.groupEnd();
console.groupEnd();

Which will produce the following output

Outer Group
  Inner Group
     [Log]
     Http Request Sent
     /path/to/file:8:11

     [Log]
     Http Response Received
     /path/to/file:9:11

Checked Grouping

To confirm groups are being ended when expected, the startGroup and endGroup functions can be used.

startGroup takes a ConsoleGroupToken or a string and begins a console group. endGroup also takes a ConsoleGroupToken or a string, and will raise a warning message if groups are being ended in the wrong order.

ConsoleGroupToken

The ConsoleGroupToken is an empty enum. It can be replaced by custom enum values by declaring the type somewhere in your project.

// in 'typings.d.ts' or similar file
declare module "@autometa/logging" {
    export enum ConsoleGroupToken {
        Scenario = 'Scenario',
        Test = 'Test'
    }
}

Which can now be used directly

startGroup(ConsoleGroupToken.Scenario)

startGroup can also accept additional values which will be displayed in the group title

startGroup(ConsoleGroupToken.Scenario, 'first', 1)
// prints 
// Scenario: first, 1

Grouping

Alternatively the grouping function can be used. grouping takes a title and an action. The action is executed and the group is closed again before the error is propagated.

Grouping will return the value of an action directly. If the action returns a promise, then grouping can be awaited

grouping('a group', ()=>{
    doStuff()
})

await grouping('an async group', async ()=>{
    return someAsyncJob()
})

Async

Grouping only makes sense in a synchronous context. Groups should only be written outside of async functions which are not immediately awaited.

However async actions can be run within a group - just be sure they're all completed before ending it.

Readme

Keywords

none

Package Sidebar

Install

npm i @autometa/logging

Weekly Downloads

1

Version

0.0.2

License

none

Unpacked Size

26.4 kB

Total Files

20

Last publish

Collaborators

  • benah