hookio.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. "use strict";
  2. var log4js = require('../log4js')
  3. , layouts = require('../layouts')
  4. , Hook = require('hook.io').Hook
  5. , util = require('util');
  6. var Logger = function createLogger(options) {
  7. var self = this;
  8. var actualAppender = options.actualAppender;
  9. Hook.call(self, options);
  10. self.on('hook::ready', function hookReady() {
  11. self.on('*::' + options.name + '::log', function log(loggingEvent) {
  12. deserializeLoggingEvent(loggingEvent);
  13. actualAppender(loggingEvent);
  14. });
  15. });
  16. };
  17. util.inherits(Logger, Hook);
  18. function deserializeLoggingEvent(loggingEvent) {
  19. loggingEvent.startTime = new Date(loggingEvent.startTime);
  20. loggingEvent.level.toString = function levelToString() {
  21. return loggingEvent.level.levelStr;
  22. };
  23. }
  24. function initHook(hookioOptions) {
  25. var loggerHook;
  26. if (hookioOptions.mode === 'master') {
  27. // Start the master hook, handling the actual logging
  28. loggerHook = new Logger(hookioOptions);
  29. } else {
  30. // Start a worker, just emitting events for a master
  31. loggerHook = new Hook(hookioOptions);
  32. }
  33. loggerHook.start();
  34. return loggerHook;
  35. }
  36. function getBufferedHook(hook, eventName) {
  37. var hookBuffer = [];
  38. var hookReady = false;
  39. hook.on('hook::ready', function emptyBuffer() {
  40. hookBuffer.forEach(function logBufferItem(loggingEvent) {
  41. hook.emit(eventName, loggingEvent);
  42. });
  43. hookReady = true;
  44. });
  45. return function log(loggingEvent) {
  46. if (hookReady) {
  47. hook.emit(eventName, loggingEvent);
  48. } else {
  49. hookBuffer.push(loggingEvent);
  50. }
  51. };
  52. }
  53. function createAppender(hookioOptions) {
  54. var loggerHook = initHook(hookioOptions);
  55. var loggerEvent = hookioOptions.name + '::log';
  56. return getBufferedHook(loggerHook, loggerEvent);
  57. }
  58. function configure(config) {
  59. var actualAppender;
  60. if (config.appender && config.mode === 'master') {
  61. log4js.loadAppender(config.appender.type);
  62. actualAppender = log4js.appenderMakers[config.appender.type](config.appender);
  63. config.actualAppender = actualAppender;
  64. }
  65. return createAppender(config);
  66. }
  67. exports.appender = createAppender;
  68. exports.configure = configure;