Git Product home page Git Product logo

console-buffer's Introduction

console-buffer

NPM

Buffer calls to console.log, console.warn, etc. for deferred logging in NodeJS and web browsers.

Description

Calls to console methods are synchronous, and as such, will block the event loop while the data is being written to a file, terminal, socket, pipe, etc.

This module provides a seamless, drop-in buffer for all calls to the following console functions, and automatically flushes the buffer when it exceeds a certain size (8k by default). In NodeJS, the buffer also flushes when the process exits.

  • console.log
  • console.info
  • console.warn
  • console.error
  • console.table

Building for Browsers

Bundle index.js with Browserify in standalone mode, which should include a copy of the NodeJS util module to be used inside this module. The main bundle (console-buffer.js) and an UglifyJS2 minified version (console-buffer.min.js) will be saved to the dist directory.

You can just run the included NPM script which does this:

npm run bundle

Example

In NodeJS

require('console-buffer');
console.log('Hello'); // Buffered
console.log('world'); // Buffered
// Flushed at exit or 8k of data

In Browsers

console.log('Hello'); // Buffered
console.log('world'); // Buffered
// Flushed manually or at 8k of data (no automatic flush on exit)
logbuffer.flush(); // Flushed

console._LOG_BUFFER is also defined when this module is included for the first time, and is set to the module.

require('console-buffer');
console.log('Hello'); // Buffered
console.log('world'); // Buffered
console._LOG_BUFFER.flush() // Flushed

Customization

If using the module in web browsers, you can replace any of the following require(...)(...) with consoleBuffer(...).

Buffer Size Limit

You can specify an alternative buffer size to use for automatic flushing like this:

require('console-buffer')(4096); // Buffer will flush at 4k

Prefixing Logs

You can specify a string or callback function which returns a string which will prefix all logs.

Specify a string. Here, all log statements will be prepended MyLog: when flushed:

require('console-buffer')(4096, 'MyLog: ');

Specify a callback function which returns a string. Here, all log statements will be prepended by 2013-04-27T04:37:24.703Z: as an example:

require('console-buffer')(4096, function() {
	return new Date().toISOString() + ': ';
});

Manually Flushing the Buffer

This module also exposes the flush function used to flush all buffers, so you can manually invoke a flush:

const logbuffer = require('console-buffer');
console.log('hello'); // Buffered
console.log('world'); // Buffered
logbuffer.flush(); // Flushed

Also, you can specify an interval to automatically flush all buffers so logs don't get held in memory indefinitely.

const logbuffer = require('console-buffer');
setInterval(function() {
  logbuffer.flush();
}, 5000); // Flush every 5 seconds

This will flush automatically at 8k of data as well as every 5 seconds.

Flushing the Buffer Without Logging

logBuffer.clear() will empty the contents of the buffer without logging them to the console.

console-buffer's People

Contributors

bahamas10 avatar floofies avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

mashthekeys

console-buffer's Issues

Buffers Flushed in Incorrect Order

All buffers are flushed when flush is called (whether automatically or manually). Because of this, calls to different console family functions may return out of order.

Example:

require('log-buffer');
console.log(1);
console.error(2);
console.log(3);

yields

1
3
2

1 and 3 are both written to stdout and 2 is written stderr.
The priority order in flushing is ['warn', 'log', 'error', 'info']

Add a `.clear` method

It would be great if we could .clear the buffer, without outputting anything.
Our use case is for test debug logging, that we want to print only if the tests failed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.