Narnia's Psychedelic Mushrooms
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    fluent-loggerpublic

    fluent-logger for Node.js

    fluent-logger implementation for Node.js inspired by fluent-logger-python.

    NPM

    Build Status

    Install

    $ npm install fluent-logger
    

    Prerequistes

    Fluent daemon should listen on TCP port.

    Simple configuration is following:

    <source>
      @type forward
      port 24224
    </source>
     
    <match **.*>
      @type stdout
    </match>

    Usage

    Send an event record to Fluentd

    Singleton style

    var logger = require('fluent-logger')
    // The 2nd argument can be omitted. Here is a default value for options.
    logger.configure('tag_prefix', {
       host: 'localhost',
       port: 24224,
       timeout: 3.0,
       reconnectInterval: 600000 // 10 minutes
    });
     
    // send an event record with 'tag.label'
    logger.emit('label', {record: 'this is a log'});

    Instance style

    var logger = require('fluent-logger').createFluentSender('tag_prefix', {
       host: 'localhost',
       port: 24224,
       timeout: 3.0,
       reconnectInterval: 600000 // 10 minutes
    });

    The emit method has following signature

    .emit([label string], <record object>, [timestamp number/date], [callback function])

    Where only the record argument is required. If the label is set it will be appended to the configured tag.

    Shared key authentication

    Logger configuration:

    var logger = require('fluent-logger').createFluentSender('tag_prefix', {
      host: 'localhost',
      port: 24224,
      timeout: 3.0,
      reconnectInterval: 600000, // 10 minutes
      security: {
        clientHostname: "client.localdomain",
        sharedKey: "secure_communication_is_awesome"
      }
    });
    logger.emit('debug', { message: 'This is a message' });

    Server configuration:

    <source>
      @type forward
      port 24224
      <security>
        self_hostname input.testing.local
        shared_key secure_communication_is_awesome
      </security>
    </source>
     
    <match dummy.*>
      @type stdout
    </match>

    See also Fluentd examples.

    EventTime support

    We can also specify EventTime as timestamp.

    var FluentLogger = require('fluent-logger');
    var EventTime = FluentLogger.EventTime;
    var logger = FluentLogger.createFluentSender('tag_prefix', {
    var eventTime = new EventTime(1489547207, 745003500); // 2017-03-15 12:06:47 +0900
    logger.emit('tag', { message: 'This is a message' }, eventTime);

    Events

    var logger = require('fluent-logger').createFluentSender('tag_prefix', {
       host: 'localhost',
       port: 24224,
       timeout: 3.0,
       reconnectInterval: 600000 // 10 minutes
    });
    logger.on('error', (error) => {
      console.log(error);
    });
    logger.on('connect', () => {
      console.log('connected!');
    });

    Logging Library Support

    log4js

    Use log4js-fluent-appender.

    winston

    Before using winston support, you should install it IN YOUR APPLICATION.

    var winston = require('winston');
    var config = {
      host: 'localhost',
      port: 24224,
      timeout: 3.0,
      requireAckResponse: true // Add this option to wait response from Fluentd certainly
    };
    var fluentTransport = require('fluent-logger').support.winstonTransport();
    var logger = new (winston.Logger)({
        transports: [new fluentTransport('mytag', config), new (winston.transports.Console)()]
    });
     
    logger.on('logging', (transport, level, message, meta) => {
      if (meta.end && transport.sender && transport.sender.end) {
        transport.sender.end();
      }
    });
     
    logger.log('info', 'this log record is sent to fluent daemon');
    logger.info('this log record is sent to fluent daemon');
    logger.info('end of log message', { end: true });

    stream

    Several libraries use stream as output.

    'use strict';
    const Console = require('console').Console;
    var sender = require('fluent-logger').createFluentSender('tag_prefix', {
       host: 'localhost',
       port: 24224,
       timeout: 3.0,
       reconnectInterval: 600000 // 10 minutes
    });
    var logger = new Console(sender.toStream('stdout'), sender.toStream('stderr'));
    logger.log('this log record is sent to fluent daemon');
    setTimeout(()=> sender.end(), 5000);

    Options

    tag_prefix

    The tag prefix string. You can specify null when you use FluentSender directly. In this case, you must specify label when you call emit.

    host

    The hostname. Default value = 'localhost'.

    See socket.connect

    port

    The port to listen to. Default value = 24224.

    See socket.connect

    path

    The path to your Unix Domain Socket. If you set path then fluent-logger ignores host and port.

    See socket.connect

    timeout

    Set the socket to timetout after timeout milliseconds of inactivity on the socket.

    See socket.setTimeout

    reconnectInterval

    Set the reconnect interval in milliseconds. If error occurs then reconnect after this interval.

    requireAckResponse

    Change the protocol to at-least-once. The logger waits the ack from destination.

    ackResponseTimeout

    This option is used when requireAckResponse is true. The default is 190. This default value is based on popular tcp_syn_retries.

    eventMode

    Set Event Modes. This logger supports Message, PackedForward and CompressedPackedForward. Default is Message.

    NOTE: We will change default to PackedForward and drop Message in next major release.

    flushInterval

    Set flush interval in milliseconds. This option has no effect in Message mode. The logger stores emitted events in buffer and flush events for each interval. Default 100.

    security.clientHostname

    Set hostname of this logger. Use this value for hostname based authentication.

    security.sharedKey

    Shared key between client and server.

    security.username

    Set username for user based authentication. Default values is empty string.

    security.password

    Set password for user based authentication. Default values is empty string.

    internalLogger

    Set internal logger object for FluentLogger. Use console by default. This logger requires info and error method.

    License

    Apache License, Version 2.0.

    About NodeJS versions

    This package is compatible with NodeJS versions > 4.

    install

    npm i fluent-logger

    Downloadslast 7 days

    13,882

    version

    2.6.2

    license

    Apache-2.0

    repository

    github.com

    last publish

    collaborators

    • avatar
    • avatar
    • avatar
    • avatar