fifo-logger
    Preparing search index...

    fifo-logger

    fifo-logger

    NPM version npm download test coverage license

    Simple event logger for the browser and Node.js inspired by pino.

    By default, it will keep the 10'000 last events that can easily be retrieved and filtered.

    npm install fifo-logger
    
    import { FifoLogger } from 'fifo-logger';

    const logger = new FifoLogger({
    limit: 1000, // default value
    level: 'info', // by default we will not log the level under 'info' (trace and debug)
    });

    logger.trace('a trace');
    logger.debug('a debug');
    logger.info('an info');
    logger.warn('a warning');
    logger.error('a error');
    logger.fatal('fatal');

    // you have also the possibility to log an object or object + message

    logger.warn({ a: 1, b: 2, c: 'Hello' }, 'a warning');

    // errors can also be directly added to the logger

    logger.fatal(new Error('a fatal error'));

    // to get the logs

    const logs = logger.getLogs();

    A child logger may be created in order to store specific related logs. Each logger or child logger will receive a specific UUID.

    import { FifoLogger } from 'fifo-logger';

    const logger = new FifoLogger();
    logger.info('an info');

    const childLogger = logger.child();
    childLogger.info('from child');

    const grandChildLogger = childLogger.child();
    grandChildLogger.info('from grandchild');

    const anotherLogger = logger.child();
    anotherLogger.info('from another child');

    console.log(logger.getLogs()); // 1 element
    console.log(logger.getLogs({ includeChildren: true })); // 4 elements
    console.log(childLogger.getLogs()); // 1 element
    console.log(childLogger.getLogs({ includeChildren: true })); // 3 elements

    If you need to update the log list based on new addition you can add the onChange callback

    const logger = new FifoLogger({
    onChange: (log, logs, info) => {
    console.log(log, logs, info);
    },
    });
    logger.info('Hello world');

    // info contains 'depth' starting at 1

    Libraries may be quite verbose and you can throttle the callback using such a code

    import { throttle } from 'throttle-debounce';

    import { FifoLogger } from 'fifo-logger';

    let results: any = [];

    let throttleFunc = throttle(100, (log, logs) => {
    results.push(log.message);
    results.push(logs.length);
    });

    const logger = new FifoLogger({
    onChange: throttleFunc,
    });

    logger.info('first info');
    logger.info('second info');

    const start = Date.now();
    while (Date.now() - start < 120);

    logger.info('an info after 120ms');

    console.log(results);
    // ['first info', 1, 'an info after 120ms', 3]
    <html>
    <head>
    <script
    src="https://www.lactame.com/lib/fifo-logger/0.3.0/fifo-logger.js"
    type="text/javascript"
    ></script>
    <script Logger="fifo-logger" type="text/javascript">
    const logger = new FifoLogger.FifoLogger({
    onChange: (log, logs) => {
    console.log(logs);
    document.getElementById('logs').innerHTML =
    '<table><tr><th>Level</th><th>Message</th></tr>' +
    logs
    .map((log) => {
    return `<tr><td>${log.level}</td><td>${log.message}</td></tr>`;
    })
    .join('') +
    '</table>';
    },
    });
    </script>
    </head>
    <body>
    <button onclick="logger.warn('warning')">Warning</button>
    <div id="logs"></div>

    <script>
    logger.info('Hello World!');
    logger.error('This is an error');
    </script>
    </body>
    </html>

    MIT