Index

Log Sink

A service for streaming, storage and query of log data.

This is the client-side implementation for both Nodejs and the browser. For the server-side implementation and server public API, see log-sink-server.

Install

npm install log-sink --save

Usage

var sink = require('log-sink'),
    fs = require('fs')

// Connect to log sink server using a secure connection
sink.connect('my-user', 'my-password', {
    host: 'localhost',
    port: 8018,
    secure: true,
    // If the server is using a self-signed certificate,
    // include it here
    ca: fs.readFileSync('keys/self-signed-cert.pem')
})
// In the browser, use:
sink.connect('my-user', 'my-password', 'wss://localhost:8019')

// Write
// sink.{debug,info,warn,error,fatal}(name, [message], [extra])
// If the connection is not ready yet, it will be buffered and
// executed when it gets ready
sink.info('readme', 'My first log', ['custom data', 17])
sink.error('readme', new Error('We had a problem'))

// Or avoid typing the required name every time
var logger = sink.bindName('readme')
logger.debug('Got here!')

// Streaming
sink.stream(function (err, stream) {
    if (err) throw err
    // stream is a ReadableStream in object mode
    stream.on('data', function (log) {
        console.log(log)
    })
    // call stream.stop() when you are done
})

// Querying
sink.query({
    level: {
        min: sink.LEVEL.WARN
    }
}, function (err, logs) {
    if (err) throw err
    console.log(logs)
})

The only difference between the use in Nodejs and browsers is the third connect parameter. In Nodejs, it's an object; for browser it's the WS url.

Browsers will connect using WebSocket and Nodejs will use TCP directly. Note that the ports are NOT the same.

Multiple connections

var sink = require('log-sink'),
    conn = new sink.Connection,
    conn2 = new sink.Connection

conn.connect('user', 'pass', options)
conn2.connect('user2', 'pass2', options2)

Log Sink

To understand more about log sink, read the doc on the server project

Docs

All public methods are described in the generated docs