@mixmaxhq/tail

tail a file in node

Usage no npm install needed!

<script type="module">
  import mixmaxhqTail from 'https://cdn.skypack.dev/@mixmaxhq/tail';
</script>

README

Tail

NPM

Author: Luca Grulla - www.lucagrulla.com

Installation

npm install tail

Use:

Tail = require('tail').Tail;

tail = new Tail("fileToTail");

tail.on("line", function(data) {
  console.log(data);
});

tail.on("error", function(error) {
  console.log('ERROR: ', error);
});

If you want to stop tail:

tail.unwatch()

To start watching again:

tail.watch()

Configuration

The only mandatory parameter is the path to the file to tail.

var fileToTail = "/path/to/fileToTail.txt";
new Tail(fileToTail)

Optional parameters can be passed via a hash:

var options= {separator: /[\r]{0,1}\n/, fromBeginning: false, startPos: 50, fsWatchOptions: {}, follow: true, logger: console}
new Tail(fileToTail, options)

Available parameters:

  • separator: the line separator token (default /[\r]{0,1}\n/ to handle linux/mac (9+)/windows)
  • fsWatchOptions: the full set of options that can be passed to fs.watch as per node documentation (default: {})
  • fromBeginning: forces the tail of the file from the very beginning of it instead of from the first new line that will be appended (default: false)
  • startPos: forces the tail from certain position, if set — fromBeginning param will be ignored. (default: null)
  • follow: simulate tail -F option. In the case the file is moved/renamed (or logrotated), if set to true tail will try to start tailing again after a 1 second delay, if set to false it will just emit an error event (default: true)
  • logger: a logger object(default: no logger). The passed logger has to respond to two methods:
    • info([data][, ...])
    • error([data][, ...])
  • useWatchFile: if set to true will force the use of fs.watchFile rather than delegating to the library the choice between fs.watch and fs.watchFile (default: false)
  • encoding: the encoding of the file to tail (default:utf-8)

Emitted events

Tail emits four events:

  • line
function(data){
  console.log(data)
}
  • data
function(data){
  console.log(data)
}
  • error
function(exception){}
  • historicalDataEnd
function(end){
  console.log('Historical data size is', end)
}

Want to fork?

Tail is written in CoffeeScript.

The Cakefile generates the javascript that is then published to npm.

Real world use

Tail was born as part of a data firehose. Read about it here.

License

MIT. Please see License file for more details.