Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
dump text streams into a directory and read the data back intelligently
JavaScript
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
example all example somewhat works
test
.travis.yml
LICENSE
index.js
package.json
readme.markdown

readme.markdown

logdir

dump text streams into a directory and read the data back intelligently

build status

example

You can just create some writable streams and read the data back for a single file:

var logdir = require('logdir');
var ld = logdir('/tmp/logdir');
var ws = ld.createWriteStream('robot');

ld.open('robot').follow(-5).pipe(process.stdout);
ws.write('beep boop\n');
$ node example/log.js
1366537631914 beep boop
1366537651318 beep boop
1366537657376 beep boop

or you can handle multiple log files at once:

var logdir = require('logdir');
var ld = logdir('/tmp/logdir');
var a = ld.createWriteStream('a');
var b = ld.createWriteStream('b');
setInterval(function () {
    a.write(String.fromCharCode(Math.random() * 26 + 97) + '\n');
}, 1000);

setInterval(function () {
    b.write(String.fromCharCode(Math.random() * 26 + 65) + '\n');
}, 1000);

ld.open([ 'a', 'b' ]).follow(-5).pipe(process.stdout);
$ node example/many.js 
a 1366537714837 v
b 1366537714838 Z
a 1366537715837 o
b 1366537715838 N
a 1366537716839 u
b 1366537716839 O
a 1366537717839 z
b 1366537717839 X

or you can even follow files that don't exist yet:

var logdir = require('logdir');
var ld = logdir('/tmp/logdir');
ld.open().follow(-5).pipe(process.stdout);
$ node all.js &
[1] 8545
$ echo $(node -pe 'Date.now()') beep >> /tmp/logdir/newfile
newfile 1366537884613 beep
$ echo $(node -pe 'Date.now()') boop >> /tmp/logdir/newfile
newfile 1366537892127 boop
$ echo $(node -pe 'Date.now()') whoa >> /tmp/logdir/anotherfile
anotherfile 1366537899027 whoa
$ kill %%

methods

var logdir = require('logdir')

var ld = logdir(dir)

Create a new logdir instance ld from a directory dir.

var sf = ld.open(names)

Create a slice-file handle sf to operate on all the names collectively.

If names is:

  • a string - only slice a single log file of its name
  • an array - slice the combined output of each log file, prepending "$name " to the output stream
  • undefined - slice the combined output of each log file in the directory and watch the directory for new files when running .follow()

sf.slice(begin, end)

Like [].slice(), but returns a stream of the line numbers that satisfy the begin and end constraints.

This method comes from the underlying slice-file module but may act on multiple files at once intelligently.

sf.follow(begin, end)

Returns an sf.slice() stream but watches the file and outputs all new content, like tail -f.

This method comes from the underlying slice-file module but may act on multiple files at once intelligently.

install

With npm do:

npm install logdir

license

MIT

Something went wrong with that request. Please try again.