1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.bufferDrainEvent = exports.unpipeWritableEvent = exports.pipeWritableEvent = exports.finishWritableEvent = exports.drainWritableEvent = exports.timeoutEvent = exports.disconnectedEvent = exports.connectedEvent = exports.logEvent = exports.errorEvent = exports.default = undefined;
|
7 |
|
8 | var _setImmediate2 = require('babel-runtime/core-js/set-immediate');
|
9 |
|
10 | var _setImmediate3 = _interopRequireDefault(_setImmediate2);
|
11 |
|
12 | var _isInteger = require('babel-runtime/core-js/number/is-integer');
|
13 |
|
14 | var _isInteger2 = _interopRequireDefault(_isInteger);
|
15 |
|
16 | var _promise = require('babel-runtime/core-js/promise');
|
17 |
|
18 | var _promise2 = _interopRequireDefault(_promise);
|
19 |
|
20 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
21 |
|
22 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
23 |
|
24 | var _defineProperty = require('babel-runtime/core-js/object/define-property');
|
25 |
|
26 | var _defineProperty2 = _interopRequireDefault(_defineProperty);
|
27 |
|
28 | var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
29 |
|
30 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
31 |
|
32 | var _typeof2 = require('babel-runtime/helpers/typeof');
|
33 |
|
34 | var _typeof3 = _interopRequireDefault(_typeof2);
|
35 |
|
36 | var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
|
37 |
|
38 | var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
|
39 |
|
40 | var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
41 |
|
42 | var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
43 |
|
44 | var _createClass2 = require('babel-runtime/helpers/createClass');
|
45 |
|
46 | var _createClass3 = _interopRequireDefault(_createClass2);
|
47 |
|
48 | var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
|
49 |
|
50 | var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
|
51 |
|
52 | var _inherits2 = require('babel-runtime/helpers/inherits');
|
53 |
|
54 | var _inherits3 = _interopRequireDefault(_inherits2);
|
55 |
|
56 | var _lodash = require('lodash');
|
57 |
|
58 | var _lodash2 = _interopRequireDefault(_lodash);
|
59 |
|
60 | var _semver = require('semver');
|
61 |
|
62 | var _semver2 = _interopRequireDefault(_semver);
|
63 |
|
64 | var _net = require('net');
|
65 |
|
66 | var _net2 = _interopRequireDefault(_net);
|
67 |
|
68 | var _tls = require('tls');
|
69 |
|
70 | var _tls2 = _interopRequireDefault(_tls);
|
71 |
|
72 | var _url = require('url');
|
73 |
|
74 | var _url2 = _interopRequireDefault(_url);
|
75 |
|
76 | var _stream = require('stream');
|
77 |
|
78 | var _codependency = require('codependency');
|
79 |
|
80 | var _codependency2 = _interopRequireDefault(_codependency);
|
81 |
|
82 | var _reconnectCore = require('reconnect-core');
|
83 |
|
84 | var _reconnectCore2 = _interopRequireDefault(_reconnectCore);
|
85 |
|
86 | var _defaults = require('./defaults');
|
87 |
|
88 | var defaults = _interopRequireWildcard(_defaults);
|
89 |
|
90 | var _levels = require('./levels');
|
91 |
|
92 | var levelUtil = _interopRequireWildcard(_levels);
|
93 |
|
94 | var _text = require('./text');
|
95 |
|
96 | var _text2 = _interopRequireDefault(_text);
|
97 |
|
98 | var _serialize = require('./serialize');
|
99 |
|
100 | var _serialize2 = _interopRequireDefault(_serialize);
|
101 |
|
102 | var _error = require('./error');
|
103 |
|
104 | var _ringbuffer = require('./ringbuffer');
|
105 |
|
106 | var _ringbuffer2 = _interopRequireDefault(_ringbuffer);
|
107 |
|
108 | var _bunyanstream = require('./bunyanstream');
|
109 |
|
110 | var _bunyanstream2 = _interopRequireDefault(_bunyanstream);
|
111 |
|
112 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
113 |
|
114 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
115 |
|
116 | var newline = /\n/g;
|
117 | var tokenPattern = /[a-f\d]{8}-([a-f\d]{4}-){3}[a-f\d]{12}/;
|
118 |
|
119 | var finalizeLogString = function finalizeLogString(log, token) {
|
120 | return token + ' ' + log.toString().replace(newline, '\u2028') + '\n';
|
121 | };
|
122 |
|
123 | var getConsoleMethod = function getConsoleMethod(lvl) {
|
124 | if (lvl > 3) {
|
125 | return 'error';
|
126 | } else if (lvl === 3) {
|
127 | return 'warn';
|
128 | }
|
129 | return 'log';
|
130 | };
|
131 |
|
132 | var getSafeProp = function getSafeProp(log, prop) {
|
133 | var safeProp = prop;
|
134 | while (safeProp in log) {
|
135 | safeProp = '_' + prop;
|
136 | }
|
137 | return safeProp;
|
138 | };
|
139 |
|
140 | var requirePeer = _codependency2.default.register(module);
|
141 |
|
142 | var Logger = function (_Writable) {
|
143 | (0, _inherits3.default)(Logger, _Writable);
|
144 |
|
145 | function Logger(opts) {
|
146 | (0, _classCallCheck3.default)(this, Logger);
|
147 |
|
148 | var _this = (0, _possibleConstructorReturn3.default)(this, (Logger.__proto__ || (0, _getPrototypeOf2.default)(Logger)).call(this, {
|
149 | objectMode: true
|
150 | }));
|
151 |
|
152 | if (_lodash2.default.isUndefined(opts)) {
|
153 | throw new _error.BadOptionsError(opts, _text2.default.noOptions());
|
154 | }
|
155 |
|
156 | if (!_lodash2.default.isObject(opts)) {
|
157 | throw new _error.BadOptionsError(opts, _text2.default.optionsNotObj(typeof opts === 'undefined' ? 'undefined' : (0, _typeof3.default)(opts)));
|
158 | }
|
159 |
|
160 | if (_lodash2.default.isUndefined(opts.token)) {
|
161 | throw new _error.BadOptionsError(opts, _text2.default.noToken());
|
162 | }
|
163 |
|
164 | if (!_lodash2.default.isString(opts.token) || !tokenPattern.test(opts.token)) {
|
165 | throw new _error.BadOptionsError(opts, _text2.default.invalidToken(opts.token));
|
166 | }
|
167 |
|
168 | _this.levels = levelUtil.normalize(opts);
|
169 |
|
170 | var _iteratorNormalCompletion = true;
|
171 | var _didIteratorError = false;
|
172 | var _iteratorError = undefined;
|
173 |
|
174 | try {
|
175 | var _loop = function _loop() {
|
176 | var lvlName = _step.value;
|
177 |
|
178 | if (lvlName in _this) {
|
179 | throw new _error.BadOptionsError(opts, _text2.default.levelConflict(lvlName));
|
180 | }
|
181 |
|
182 | (0, _defineProperty2.default)(_this, lvlName, {
|
183 | enumerable: true,
|
184 | writable: false,
|
185 | value: function value() {
|
186 | this.log.apply(this, [lvlName].concat(Array.prototype.slice.call(arguments)));
|
187 | }
|
188 | });
|
189 | };
|
190 |
|
191 | for (var _iterator = (0, _getIterator3.default)(_this.levels), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
192 | _loop();
|
193 | }
|
194 | } catch (err) {
|
195 | _didIteratorError = true;
|
196 | _iteratorError = err;
|
197 | } finally {
|
198 | try {
|
199 | if (!_iteratorNormalCompletion && _iterator.return) {
|
200 | _iterator.return();
|
201 | }
|
202 | } finally {
|
203 | if (_didIteratorError) {
|
204 | throw _iteratorError;
|
205 | }
|
206 | }
|
207 | }
|
208 |
|
209 | _this.secure = opts.secure === undefined ? defaults.secure : opts.secure;
|
210 | _this.debugEnabled = opts.debug === undefined ? defaults.debug : opts.debug;
|
211 | _this.json = opts.json;
|
212 | _this.flatten = opts.flatten;
|
213 | _this.flattenArrays = 'flattenArrays' in opts ? opts.flattenArrays : opts.flatten;
|
214 | _this.console = opts.console;
|
215 | _this.withLevel = 'withLevel' in opts ? opts.withLevel : true;
|
216 | _this.withStack = opts.withStack;
|
217 | _this.timestamp = opts.timestamp || false;
|
218 |
|
219 | _this.bufferSize = opts.bufferSize || defaults.bufferSize;
|
220 | _this.port = opts.port || (_this.secure ? defaults.portSecure : defaults.port);
|
221 | _this.host = opts.host;
|
222 | _this.minLevel = opts.minLevel;
|
223 | _this.replacer = opts.replacer;
|
224 | _this.inactivityTimeout = opts.inactivityTimeout || defaults.inactivityTimeout;
|
225 | _this.token = opts.token;
|
226 | _this.reconnectInitialDelay = opts.reconnectInitialDelay || defaults.reconnectInitialDelay;
|
227 | _this.reconnectMaxDelay = opts.reconnectMaxDelay || defaults.reconnectMaxDelay;
|
228 | _this.reconnectBackoffStrategy = opts.reconnectBackoffStrategy || defaults.reconnectBackoffStrategy;
|
229 |
|
230 | if (!_this.debugEnabled) {
|
231 | _this.debugLogger = {
|
232 | log: function log() {}
|
233 | };
|
234 | } else {
|
235 | _this.debugLogger = opts.debugLogger && opts.debugLogger.log ? opts.debugLogger : defaults.debugLogger;
|
236 | }
|
237 |
|
238 | var isSecure = _this.secure;
|
239 | _this.ringBuffer = new _ringbuffer2.default(_this.bufferSize);
|
240 | _this.reconnect = (0, _reconnectCore2.default)(function initialize() {
|
241 | var _this2 = this;
|
242 |
|
243 | var connection = void 0;
|
244 | var args = [].slice.call(arguments);
|
245 | if (isSecure) {
|
246 | connection = _tls2.default.connect.apply(_tls2.default, args, function () {
|
247 | if (!connection.authorized) {
|
248 | var errMsg = connection.authorizationError;
|
249 | _this2.emit(new _error.LogentriesError(_text2.default.authError(errMsg)));
|
250 | } else if (_tls2.default && _tls2.default.CleartextStream && connection instanceof _tls2.default.CleartextStream) {
|
251 | _this2.emit('connect');
|
252 | }
|
253 | });
|
254 | } else {
|
255 | connection = _net2.default.connect.apply(null, args);
|
256 | }
|
257 | connection.setTimeout(opts.inactivityTimeout || defaults.inactivityTimeout);
|
258 | return connection;
|
259 | });
|
260 |
|
261 | _this.ringBuffer.on('buffer shift', function () {
|
262 | _this.debugLogger.log('Buffer is full, will be shifting records until buffer is drained.');
|
263 | });
|
264 |
|
265 | _this.on('buffer drain', function () {
|
266 | _this.debugLogger.log('RingBuffer drained.');
|
267 | });
|
268 | return _this;
|
269 | }
|
270 |
|
271 | (0, _createClass3.default)(Logger, [{
|
272 | key: '_write',
|
273 | value: function _write(ch, enc, cb) {
|
274 | var _this3 = this;
|
275 |
|
276 | this.connection.then(function (conn) {
|
277 | var record = _this3.ringBuffer.read();
|
278 | if (record) {
|
279 | if (_this3.ringBuffer.isEmpty()) {
|
280 | conn.write(record, function () {
|
281 | process.nextTick(function () {
|
282 | _this3.emit('buffer drain');
|
283 |
|
284 | _this3.emit('connection drain');
|
285 | });
|
286 | });
|
287 | } else {
|
288 | conn.write(record);
|
289 | }
|
290 | } else {
|
291 | _this3.debugLogger.log('This should not happen. Read from ringBuffer returned null.');
|
292 | }
|
293 | cb();
|
294 | }).catch(function (err) {
|
295 | _this3.emit('error', err);
|
296 | _this3.debugLogger.log('Error: ' + err);
|
297 | cb();
|
298 | });
|
299 | }
|
300 | }, {
|
301 | key: 'setDefaultEncoding',
|
302 | value: function setDefaultEncoding() {}
|
303 | }, {
|
304 | key: 'log',
|
305 | value: function log(lvl, _log) {
|
306 | var modifiedLevel = lvl;
|
307 | var modifiedLog = _log;
|
308 |
|
309 | if (modifiedLog === undefined) {
|
310 | modifiedLog = modifiedLevel;
|
311 | modifiedLevel = null;
|
312 | }
|
313 |
|
314 | var lvlName = void 0;
|
315 |
|
316 | if (modifiedLevel || modifiedLevel === 0) {
|
317 | var _toLevel = this.toLevel(modifiedLevel);
|
318 |
|
319 | var _toLevel2 = (0, _slicedToArray3.default)(_toLevel, 2);
|
320 |
|
321 | modifiedLevel = _toLevel2[0];
|
322 | lvlName = _toLevel2[1];
|
323 |
|
324 | if (!modifiedLevel && modifiedLevel !== 0) {
|
325 | this.emit('error', new _error.LogentriesError(_text2.default.unknownLevel(modifiedLevel)));
|
326 | return;
|
327 | }
|
328 |
|
329 | if (modifiedLevel < this.minLevel) {
|
330 | return;
|
331 | }
|
332 | }
|
333 |
|
334 | if (_lodash2.default.isArray(modifiedLog)) {
|
335 | if (modifiedLog.length) {
|
336 | var _iteratorNormalCompletion2 = true;
|
337 | var _didIteratorError2 = false;
|
338 | var _iteratorError2 = undefined;
|
339 |
|
340 | try {
|
341 | for (var _iterator2 = (0, _getIterator3.default)(modifiedLog), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
342 | var $modifiedLog = _step2.value;
|
343 | this.log(modifiedLevel, $modifiedLog);
|
344 | }
|
345 | } catch (err) {
|
346 | _didIteratorError2 = true;
|
347 | _iteratorError2 = err;
|
348 | } finally {
|
349 | try {
|
350 | if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
351 | _iterator2.return();
|
352 | }
|
353 | } finally {
|
354 | if (_didIteratorError2) {
|
355 | throw _iteratorError2;
|
356 | }
|
357 | }
|
358 | }
|
359 | } else {
|
360 | this.emit('error', new _error.LogentriesError(_text2.default.noLogMessage()));
|
361 | }
|
362 | return;
|
363 | }
|
364 |
|
365 | if (_lodash2.default.isObject(modifiedLog)) {
|
366 | var safeTime = void 0;
|
367 | var safeLevel = void 0;
|
368 |
|
369 | if (this.timestamp) {
|
370 | safeTime = getSafeProp(modifiedLog, 'time');
|
371 | modifiedLog[safeTime] = new Date();
|
372 | }
|
373 |
|
374 | if (this.withLevel && lvlName) {
|
375 | safeLevel = getSafeProp(modifiedLog, 'level');
|
376 | modifiedLog[safeLevel] = lvlName;
|
377 | }
|
378 |
|
379 | modifiedLog = this._serialize(modifiedLog);
|
380 |
|
381 | if (!modifiedLog) {
|
382 | this.emit('error', new _error.LogentriesError(_text2.default.serializedEmpty()));
|
383 | return;
|
384 | }
|
385 |
|
386 | if (this.console) {
|
387 | console[getConsoleMethod(modifiedLevel)](JSON.parse(modifiedLog));
|
388 | }
|
389 |
|
390 | if (safeTime) delete modifiedLog[safeTime];
|
391 | if (safeLevel) delete modifiedLog[safeLevel];
|
392 | } else {
|
393 | if (_lodash2.default.isEmpty(modifiedLog)) {
|
394 | this.emit('error', new _error.LogentriesError(_text2.default.noLogMessage()));
|
395 | return;
|
396 | }
|
397 |
|
398 | modifiedLog = [modifiedLog.toString()];
|
399 |
|
400 | if (this.withLevel && lvlName) {
|
401 | modifiedLog.unshift(lvlName);
|
402 | }
|
403 |
|
404 | if (this.timestamp) {
|
405 | modifiedLog.unshift(new Date().toISOString());
|
406 | }
|
407 |
|
408 | modifiedLog = modifiedLog.join(' ');
|
409 |
|
410 | if (this.console) {
|
411 | console[getConsoleMethod(modifiedLevel)](modifiedLog);
|
412 | }
|
413 | }
|
414 |
|
415 | this.emit('log', modifiedLog);
|
416 |
|
417 | if (this.ringBuffer.write(finalizeLogString(modifiedLog, this.token))) {
|
418 | this.write();
|
419 | }
|
420 | }
|
421 | }, {
|
422 | key: 'closeConnection',
|
423 | value: function closeConnection() {
|
424 | this.debugLogger.log('Closing retry mechanism along with its connection.');
|
425 | if (!this.reconnection) {
|
426 | this.debugLogger.log('No reconnection instance found. Returning.');
|
427 | return;
|
428 | }
|
429 |
|
430 | this.reconnection.disconnect();
|
431 | }
|
432 | }, {
|
433 | key: 'toLevel',
|
434 | value: function toLevel(val) {
|
435 | var num = void 0;
|
436 |
|
437 | if (levelUtil.isNumberValid(val)) {
|
438 | num = parseInt(val, 10);
|
439 | } else {
|
440 | num = this.levels.indexOf(val);
|
441 | }
|
442 |
|
443 | var name = this.levels[num];
|
444 |
|
445 | return name ? [num, name] : [];
|
446 | }
|
447 | }, {
|
448 | key: 'level',
|
449 | value: function level(name) {
|
450 | console.warn(_text2.default.deprecatedLevelMethod());
|
451 | if (~this.levels.indexOf(name)) this.minLevel = name;
|
452 | }
|
453 | }, {
|
454 | key: 'reconnect',
|
455 | get: function get() {
|
456 | return this._reconnect;
|
457 | },
|
458 | set: function set(func) {
|
459 | this._reconnect = func;
|
460 | }
|
461 | }, {
|
462 | key: 'connection',
|
463 | get: function get() {
|
464 | var _this4 = this;
|
465 |
|
466 | if (this._connection) {
|
467 | return this._connection;
|
468 | }
|
469 |
|
470 | this.debugLogger.log('No connection exists. Creating a new one.');
|
471 |
|
472 | if (this.reconnection) {
|
473 | this.reconnection.disconnect();
|
474 | this.reconnection = null;
|
475 | }
|
476 |
|
477 | this.reconnection = this.reconnect({
|
478 | initialDelay: this.reconnectInitialDelay,
|
479 | maxDelay: this.reconnectMaxDelay,
|
480 | strategy: this.reconnectBackoffStrategy,
|
481 | failAfter: Infinity,
|
482 | randomisationFactor: 0,
|
483 | immediate: false
|
484 | });
|
485 |
|
486 | this.connection = new _promise2.default(function (resolve) {
|
487 | var connOpts = {
|
488 | host: _this4.host,
|
489 | port: _this4.port
|
490 | };
|
491 |
|
492 | _this4.reconnection.on('connect', function (connection) {
|
493 | _this4.debugLogger.log('Connected');
|
494 | _this4.emit('connected');
|
495 |
|
496 | connection.on('timeout', function () {
|
497 | _this4.debugLogger.log('Socket was inactive for ' + _this4.inactivityTimeout / 1000 + ' seconds. Destroying.');
|
498 | _this4.closeConnection();
|
499 | _this4.connection = null;
|
500 | _this4.emit('timed out');
|
501 | });
|
502 | resolve(connection);
|
503 | });
|
504 |
|
505 | _this4.reconnection.on('reconnect', function (n, delay) {
|
506 | if (n > 0) {
|
507 | _this4.debugLogger.log('Trying to reconnect. Times: ' + n + ' , previous delay: ' + delay);
|
508 | }
|
509 | });
|
510 |
|
511 | _this4.reconnection.once('disconnect', function () {
|
512 | _this4.debugLogger.log('Socket was disconnected');
|
513 | _this4.connection = null;
|
514 | _this4.emit('disconnected');
|
515 | });
|
516 |
|
517 | _this4.reconnection.on('error', function (err) {
|
518 | _this4.debugLogger.log('Error occurred during connection: ' + err);
|
519 | });
|
520 |
|
521 | _this4.reconnection.connect(connOpts);
|
522 | });
|
523 | return this.connection;
|
524 | },
|
525 | set: function set(obj) {
|
526 | this._connection = obj;
|
527 | }
|
528 | }, {
|
529 | key: 'reconnection',
|
530 | get: function get() {
|
531 | return this._reconnection;
|
532 | },
|
533 | set: function set(func) {
|
534 | this._reconnection = func;
|
535 | }
|
536 | }, {
|
537 | key: 'debugEnabled',
|
538 | get: function get() {
|
539 | return this._debugEnabled;
|
540 | },
|
541 | set: function set(val) {
|
542 | this._debugEnabled = !!val;
|
543 | }
|
544 | }, {
|
545 | key: 'debugLogger',
|
546 | get: function get() {
|
547 | return this._debugLogger;
|
548 | },
|
549 | set: function set(func) {
|
550 | this._debugLogger = func;
|
551 | }
|
552 | }, {
|
553 | key: 'ringBuffer',
|
554 | get: function get() {
|
555 | return this._ringBuffer;
|
556 | },
|
557 | set: function set(obj) {
|
558 | this._ringBuffer = obj;
|
559 | }
|
560 | }, {
|
561 | key: 'secure',
|
562 | get: function get() {
|
563 | return this._secure;
|
564 | },
|
565 | set: function set(val) {
|
566 | this._secure = !!val;
|
567 | }
|
568 | }, {
|
569 | key: 'token',
|
570 | get: function get() {
|
571 | return this._token;
|
572 | },
|
573 | set: function set(val) {
|
574 | this._token = val;
|
575 | }
|
576 | }, {
|
577 | key: 'bufferSize',
|
578 | get: function get() {
|
579 | return this._bufferSize;
|
580 | },
|
581 | set: function set(val) {
|
582 | this._bufferSize = val;
|
583 | }
|
584 | }, {
|
585 | key: 'console',
|
586 | get: function get() {
|
587 | return this._console;
|
588 | },
|
589 | set: function set(val) {
|
590 | this._console = !!val;
|
591 | }
|
592 | }, {
|
593 | key: 'serialize',
|
594 | get: function get() {
|
595 | return this._serialize;
|
596 | },
|
597 | set: function set(func) {
|
598 | this._serialize = func;
|
599 | }
|
600 | }, {
|
601 | key: 'flatten',
|
602 | get: function get() {
|
603 | return this._flatten;
|
604 | },
|
605 | set: function set(val) {
|
606 | this._flatten = !!val;
|
607 | this.serialize = (0, _serialize2.default)(this);
|
608 | }
|
609 | }, {
|
610 | key: 'flattenArrays',
|
611 | get: function get() {
|
612 | return this._flattenArrays;
|
613 | },
|
614 | set: function set(val) {
|
615 | this._flattenArrays = !!val;
|
616 | this.serialize = (0, _serialize2.default)(this);
|
617 | }
|
618 | }, {
|
619 | key: 'host',
|
620 | get: function get() {
|
621 | return this._host;
|
622 | },
|
623 | set: function set(val) {
|
624 | if (!_lodash2.default.isString(val) || !val.length) {
|
625 | this._host = defaults.host;
|
626 | return;
|
627 | }
|
628 |
|
629 | var host = val.replace(/^https?:\/\//, '');
|
630 |
|
631 | var url = _url2.default.parse('http://' + host);
|
632 |
|
633 | this._host = url.hostname || defaults.host;
|
634 |
|
635 | if (url.port) this.port = url.port;
|
636 | }
|
637 | }, {
|
638 | key: 'json',
|
639 | get: function get() {
|
640 | return this._json;
|
641 | },
|
642 | set: function set(val) {
|
643 | this._json = val;
|
644 | }
|
645 | }, {
|
646 | key: 'reconnectMaxDelay',
|
647 | get: function get() {
|
648 | return this._reconnectMaxDelay;
|
649 | },
|
650 | set: function set(val) {
|
651 | this._reconnectMaxDelay = val;
|
652 | }
|
653 | }, {
|
654 | key: 'reconnectInitialDelay',
|
655 | get: function get() {
|
656 | return this._reconnectInitialDelay;
|
657 | },
|
658 | set: function set(val) {
|
659 | this._reconnectInitialDelay = val;
|
660 | }
|
661 | }, {
|
662 | key: 'reconnectBackoffStrategy',
|
663 | get: function get() {
|
664 | return this._reconnectBackoffStrategy;
|
665 | },
|
666 | set: function set(val) {
|
667 | this._reconnectBackoffStrategy = val;
|
668 | }
|
669 | }, {
|
670 | key: 'minLevel',
|
671 | get: function get() {
|
672 | return this._minLevel;
|
673 | },
|
674 | set: function set(val) {
|
675 | var _toLevel3 = this.toLevel(val);
|
676 |
|
677 | var _toLevel4 = (0, _slicedToArray3.default)(_toLevel3, 1);
|
678 |
|
679 | var num = _toLevel4[0];
|
680 |
|
681 |
|
682 | this._minLevel = _lodash2.default.isNumber(num) ? num : 0;
|
683 | }
|
684 | }, {
|
685 | key: 'port',
|
686 | get: function get() {
|
687 | return this._port;
|
688 | },
|
689 | set: function set(val) {
|
690 | var port = parseFloat(val);
|
691 | if ((0, _isInteger2.default)(port) && _lodash2.default.inRange(port, 65536)) this._port = port;
|
692 | }
|
693 | }, {
|
694 | key: 'replacer',
|
695 | get: function get() {
|
696 | return this._replacer;
|
697 | },
|
698 | set: function set(val) {
|
699 | this._replacer = _lodash2.default.isFunction(val) ? val : undefined;
|
700 | this.serialize = (0, _serialize2.default)(this);
|
701 | }
|
702 | }, {
|
703 | key: 'inactivityTimeout',
|
704 | get: function get() {
|
705 | return this._inactivityTimeout;
|
706 | },
|
707 | set: function set(val) {
|
708 | if ((0, _isInteger2.default)(val) && val >= 0) {
|
709 | this._inactivityTimeout = parseInt(val, 10);
|
710 | }
|
711 |
|
712 | if (!_lodash2.default.isNumber(this._inactivityTimeout)) {
|
713 | this._inactivityTimeout = defaults.inactivityTimeout;
|
714 | }
|
715 | }
|
716 | }, {
|
717 | key: 'timestamp',
|
718 | get: function get() {
|
719 | return this._timestamp;
|
720 | },
|
721 | set: function set(val) {
|
722 | this._timestamp = !!val;
|
723 | }
|
724 | }, {
|
725 | key: 'withLevel',
|
726 | get: function get() {
|
727 | return this._withLevel;
|
728 | },
|
729 | set: function set(val) {
|
730 | this._withLevel = !!val;
|
731 | }
|
732 | }, {
|
733 | key: 'withStack',
|
734 | get: function get() {
|
735 | return this._withStack;
|
736 | },
|
737 | set: function set(val) {
|
738 | this._withStack = !!val;
|
739 | this.serialize = (0, _serialize2.default)(this);
|
740 | }
|
741 | }, {
|
742 | key: 'levels',
|
743 | get: function get() {
|
744 | return this._levels && this._levels.slice();
|
745 | },
|
746 | set: function set(val) {
|
747 | this._levels = val;
|
748 | }
|
749 | }], [{
|
750 | key: 'winston',
|
751 | value: function winston() {
|
752 | console.warn(_text2.default.deprecatedWinstonMethod());
|
753 | }
|
754 | }, {
|
755 | key: 'provisionWinston',
|
756 | value: function provisionWinston(winston) {
|
757 | if (winston.transports.Logentries) return;
|
758 |
|
759 | var Transport = winston.Transport;
|
760 |
|
761 | var LogentriesTransport = function (_Transport) {
|
762 | (0, _inherits3.default)(LogentriesTransport, _Transport);
|
763 |
|
764 | function LogentriesTransport(opts) {
|
765 | (0, _classCallCheck3.default)(this, LogentriesTransport);
|
766 |
|
767 | var _this5 = (0, _possibleConstructorReturn3.default)(this, (LogentriesTransport.__proto__ || (0, _getPrototypeOf2.default)(LogentriesTransport)).call(this, opts));
|
768 |
|
769 | _this5.json = opts.json;
|
770 |
|
771 | var transportOpts = _lodash2.default.clone(opts || {});
|
772 |
|
773 | transportOpts.minLevel = transportOpts.minLevel || transportOpts.level || _this5.tempLevel || 0;
|
774 |
|
775 | transportOpts.levels = transportOpts.levels || winston.levels;
|
776 | if (_semver2.default.satisfies(winston.version, '>=2.0.0')) {
|
777 | (function () {
|
778 | var levels = transportOpts.levels;
|
779 | var values = _lodash2.default.values(levels).reverse();
|
780 | transportOpts.levels = {};
|
781 | _lodash2.default.keys(levels).forEach(function (k, i) {
|
782 | transportOpts.levels[k] = values[i];
|
783 | });
|
784 | })();
|
785 | }
|
786 |
|
787 | _this5.tempLevel = null;
|
788 | _this5.logger = new Logger(transportOpts);
|
789 | _this5.logger.on('error', function (err) {
|
790 | return _this5.emit(err);
|
791 | });
|
792 | return _this5;
|
793 | }
|
794 |
|
795 | (0, _createClass3.default)(LogentriesTransport, [{
|
796 | key: 'log',
|
797 | value: function log(lvl, msg, meta, cb) {
|
798 | if (this.json) {
|
799 | var message = {
|
800 | message: msg
|
801 | };
|
802 | if (!_lodash2.default.isEmpty(meta)) {
|
803 | if (_lodash2.default.isObject(meta)) {
|
804 | _lodash2.default.defaults(message, meta);
|
805 | } else {
|
806 | message.meta = meta;
|
807 | }
|
808 | }
|
809 |
|
810 | this.logger.log(lvl, message);
|
811 | } else {
|
812 | var _message = msg;
|
813 | if (!_lodash2.default.isEmpty(meta)) {
|
814 | if (_lodash2.default.isString(_message)) {
|
815 | _message += ' ' + this.logger.serialize(meta);
|
816 | } else if (_lodash2.default.isObject(_message)) {
|
817 | _message[getSafeProp(_message, 'meta')] = meta;
|
818 | }
|
819 | }
|
820 |
|
821 | this.logger.log(lvl, _message);
|
822 | }
|
823 |
|
824 | (0, _setImmediate3.default)(cb.bind(null, null, true));
|
825 | }
|
826 | }, {
|
827 | key: 'name',
|
828 | get: function get() {
|
829 | return 'logentries';
|
830 | }
|
831 | }, {
|
832 | key: 'tempLevel',
|
833 | get: function get() {
|
834 | return this._tempLevel;
|
835 | },
|
836 | set: function set(val) {
|
837 | this._tempLevel = val;
|
838 | }
|
839 | }, {
|
840 | key: 'logger',
|
841 | get: function get() {
|
842 | return this._logger;
|
843 | },
|
844 | set: function set(obj) {
|
845 | this._logger = obj;
|
846 | }
|
847 | }, {
|
848 | key: 'level',
|
849 | get: function get() {
|
850 | var _logger$toLevel = this.logger.toLevel(this.logger.minLevel);
|
851 |
|
852 | var _logger$toLevel2 = (0, _slicedToArray3.default)(_logger$toLevel, 2);
|
853 |
|
854 | var lvlName = _logger$toLevel2[1];
|
855 |
|
856 | return lvlName;
|
857 | },
|
858 | set: function set(val) {
|
859 | if (!this.logger) {
|
860 | this.tempLevel = val;
|
861 | } else {
|
862 | this.logger.minLevel = val;
|
863 | }
|
864 | }
|
865 | }, {
|
866 | key: 'levels',
|
867 | get: function get() {
|
868 | return this.logger.levels.reduce(function (acc, lvlName, lvlNum) {
|
869 | var newAcc = acc;
|
870 | newAcc[lvlName] = lvlNum;
|
871 | return newAcc;
|
872 | }, {});
|
873 | }
|
874 | }]);
|
875 | return LogentriesTransport;
|
876 | }(Transport);
|
877 |
|
878 | winston.transports.Logentries = LogentriesTransport;
|
879 | }
|
880 | }, {
|
881 | key: 'bunyanStream',
|
882 | value: function bunyanStream(opts) {
|
883 | var stream = new _bunyanstream2.default(opts);
|
884 |
|
885 | var _stream$logger$toLeve = stream.logger.toLevel(stream.logger.minLevel);
|
886 |
|
887 | var _stream$logger$toLeve2 = (0, _slicedToArray3.default)(_stream$logger$toLeve, 2);
|
888 |
|
889 | var level = _stream$logger$toLeve2[1];
|
890 |
|
891 | var type = 'raw';
|
892 | var name = 'logentries';
|
893 |
|
894 | stream.logger.minLevel = 0;
|
895 |
|
896 | return { level: level, name: name, stream: stream, type: type };
|
897 | }
|
898 | }]);
|
899 | return Logger;
|
900 | }(_stream.Writable);
|
901 |
|
902 | var winston = requirePeer('winston', { optional: true });
|
903 |
|
904 | if (winston) Logger.provisionWinston(winston);
|
905 |
|
906 | var winston1 = requirePeer('winston1', { optional: true });
|
907 | var winston2 = requirePeer('winston2x', { optional: true });
|
908 |
|
909 | if (winston1) Logger.provisionWinston(winston1);
|
910 | if (winston2) Logger.provisionWinston(winston2);
|
911 |
|
912 | var errorEvent = 'error';
|
913 | var logEvent = 'log';
|
914 | var connectedEvent = 'connected';
|
915 | var disconnectedEvent = 'disconnected';
|
916 | var timeoutEvent = 'timed out';
|
917 | var drainWritableEvent = 'drain';
|
918 | var finishWritableEvent = 'finish';
|
919 | var pipeWritableEvent = 'pipe';
|
920 | var unpipeWritableEvent = 'unpipe';
|
921 | var bufferDrainEvent = 'buffer drain';
|
922 |
|
923 | exports.default = Logger;
|
924 | exports.errorEvent = errorEvent;
|
925 | exports.logEvent = logEvent;
|
926 | exports.connectedEvent = connectedEvent;
|
927 | exports.disconnectedEvent = disconnectedEvent;
|
928 | exports.timeoutEvent = timeoutEvent;
|
929 | exports.drainWritableEvent = drainWritableEvent;
|
930 | exports.finishWritableEvent = finishWritableEvent;
|
931 | exports.pipeWritableEvent = pipeWritableEvent;
|
932 | exports.unpipeWritableEvent = unpipeWritableEvent;
|
933 | exports.bufferDrainEvent = bufferDrainEvent;
|
934 | module.exports = exports['default'];
|
935 |
|