fluent / fluent-logger-node

A structured logger for Fluentd (Node.js)
Apache License 2.0
259 stars 83 forks source link

winston transport doesn't close socket #141

Closed emanueleliardo closed 5 years ago

emanueleliardo commented 5 years ago

I've tried this code, but socket does not close

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 = winston.createLogger({
    transports: [new fluentTransport('mytag', config), new (winston.transports.Console)()]
});

logger.on('logging', (transport, level, message, meta) => {
  console.log('no prints')
  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 });

my deps "dependencies": { "fluent-logger": "^3.3.1", "winston": "^3.2.1" }

what am i doing wrong?

okkez commented 5 years ago

Please try the followings: But this is a workaround.

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 fluent = new fluentTransport('mytag', config);
var logger = winston.createLogger({
  transports: [fluent, new (winston.transports.Console)()]
});

logger.on('flush', () => {
  console.log("flush");
})

logger.on('finish', () => {
  console.log("finish");
  fluent.sender.end("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 });
logger.info('end of log message');
logger.end();

NOTE: Winston 3.x has some breaking changes from Winston2.x. For example, Winston 3.x does not have logging event.

emanueleliardo commented 5 years ago

Great! it works! Can you update documentation please? Thank you very much

damianprzygodzki commented 4 years ago

It is unable to do with TypeScript. There is lack of sender in FluentTransport type.

dikaso commented 3 years ago

This does not work anymore. I get next error:

 fluent.sender.end("end", {}, () => {})
                  ^

TypeError: Cannot read property 'end' of null
    at DerivedLogger.<anonymous> (/home/xx/public_html/winstond/index.js:32:19)
    at DerivedLogger.emit (events.js:315:20)
    at finishMaybe (/home/xx/public_html/winstond/node_modules/readable-stream/lib/_stream_writable.js:624:14)
    at /home/xx/public_html/winstond/node_modules/readable-stream/lib/_stream_writable.js:599:5
    at wrapper (/home/xx/public_html/winstond/node_modules/winston/node_modules/async/internal/once.js:12:16)
    at FluentTransport.iteratorCallback (/home/xx/public_html/winstond/node_modules/winston/node_modules/async/eachOf.js:56:13)
    at FluentTransport.<anonymous> (/home/xx/public_html/winstond/node_modules/winston/node_modules/async/internal/onlyOnce.js:12:16)
    at Object.onceWrapper (events.js:421:28)
    at FluentTransport.emit (events.js:327:22)
    at finishMaybe (/home/xx/public_html/winstond/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js:630:14)