Skip to content
This repository was archived by the owner on Jan 12, 2023. It is now read-only.

Commit e06ca84

Browse files
authored
Generate dist
1 parent 8a3beb4 commit e06ca84

4 files changed

+78
-22
lines changed

dist/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
Object.defineProperty(exports, "__esModule", { value: true });
33
const winston = require("winston");
44
const winston_sentry_raven_transport_1 = require("winston-sentry-raven-transport");
5+
const winston_logstash_transport_1 = require("winston-logstash-transport");
56
const logger_factory_generator_1 = require("./logger-factory-generator");
67
exports.loggerFactory = logger_factory_generator_1.loggerFactoryGenerator({
78
winston,
89
consoleTransportClass: winston.transports.Console,
910
sentryTransportClass: winston_sentry_raven_transport_1.default,
11+
logstashTransportClass: winston_logstash_transport_1.LogstashTransport,
1012
});

dist/logger-factory-generator.d.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@ declare interface IConfig {
55
dsn?: string;
66
level?: string;
77
};
8+
logstash?: {
9+
enabled?: boolean;
10+
application?: string;
11+
host?: string;
12+
port?: number;
13+
level?: string;
14+
};
815
}
916
export interface IFactoryInterface {
1017
config: IConfig;
1118
}
1219
declare type LoggerFactoryType = ({ config }: IFactoryInterface) => Logger;
13-
export declare const loggerFactoryGenerator: ({ winston, consoleTransportClass, sentryTransportClass }: {
20+
export declare const loggerFactoryGenerator: ({ winston, consoleTransportClass, sentryTransportClass, logstashTransportClass }: {
1421
winston: any;
1522
consoleTransportClass: any;
1623
sentryTransportClass: any;
24+
logstashTransportClass: any;
1725
}) => LoggerFactoryType;
1826
export {};

dist/logger-factory-generator.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ function prepareErrorToLog(error, messages = []) {
77
}
88
return error;
99
}
10-
exports.loggerFactoryGenerator = ({ winston, consoleTransportClass, sentryTransportClass }) => {
10+
exports.loggerFactoryGenerator = ({ winston, consoleTransportClass, sentryTransportClass, logstashTransportClass }) => {
1111
return ({ config }) => {
1212
const transports = [];
1313
transports.push(new consoleTransportClass({
@@ -19,6 +19,21 @@ exports.loggerFactoryGenerator = ({ winston, consoleTransportClass, sentryTransp
1919
level: 'error',
2020
}));
2121
}
22+
if (config.logstash && config.logstash.enabled && logstashTransportClass) {
23+
const appendMetaInfo = winston.format((info) => {
24+
return Object.assign(info, {
25+
application: config.logstash.application || 'gupy',
26+
pid: process.pid,
27+
time: moment.utc().format('YYYY-MM-DD HH:mm Z'),
28+
});
29+
});
30+
transports.push(new logstashTransportClass({
31+
host: config.logstash.host,
32+
port: config.logstash.port,
33+
level: config.logstash.level,
34+
format: winston.format.combine(appendMetaInfo(), winston.format.json(), winston.format.timestamp()),
35+
}));
36+
}
2237
const logger = winston.createLogger({
2338
format: winston.format.printf(error => `${moment.utc().format('YYYY-MM-DD HH:mm Z')} [${error.level}]: ${error.message}`),
2439
transports,

dist/logger-factory-generator.test.js

+51-20
Original file line numberDiff line numberDiff line change
@@ -16,60 +16,91 @@ class FakeConsoleTransport extends TransportStream {
1616
lastConsoleLog = info;
1717
}
1818
}
19+
let lastLogstashLog;
20+
class FakeLogstashTransport extends TransportStream {
21+
log(info) {
22+
lastLogstashLog = info;
23+
}
24+
}
1925
let logger;
2026
const symbolMessage = Symbol.for('message');
2127
const symbolLevel = Symbol.for('level');
2228
describe('gupy-logger', () => {
2329
beforeEach(() => {
2430
lastConsoleLog = null;
2531
lastSentryLog = null;
32+
lastLogstashLog = null;
2633
const loggerFactory = logger_factory_generator_1.loggerFactoryGenerator({
2734
winston,
2835
consoleTransportClass: FakeConsoleTransport,
29-
sentryTransportClass: FakeSentryTransport
36+
sentryTransportClass: FakeSentryTransport,
37+
logstashTransportClass: FakeLogstashTransport,
3038
});
3139
logger = loggerFactory({
32-
config: { sentry: { enabled: true, dsn: 'any', level: 'info' } }
40+
config: { sentry: { enabled: true, dsn: 'any', level: 'info' },
41+
logstash: { enabled: true, host: 'logstashhost', port: 12345, level: 'info' } }
3342
});
3443
});
44+
it('should init without logstash by default', () => {
45+
const loggerFactory = logger_factory_generator_1.loggerFactoryGenerator({
46+
winston,
47+
consoleTransportClass: FakeConsoleTransport,
48+
sentryTransportClass: FakeSentryTransport,
49+
logstashTransportClass: undefined,
50+
});
51+
logger = loggerFactory({
52+
config: { sentry: { enabled: true, dsn: 'any', level: 'info' } },
53+
});
54+
chai_1.expect(logger).be.not.equal(undefined);
55+
});
3556
it('should log debug nowhere', () => {
3657
logger.debug('any info');
3758
chai_1.expect(lastSentryLog).to.equal(null);
3859
chai_1.expect(lastConsoleLog).to.deep.equal(null);
3960
chai_1.expect(lastSentryLog).to.deep.equal(null);
61+
chai_1.expect(lastLogstashLog).to.deep.equal(null);
4062
});
41-
it('should log info only at console', () => {
42-
logger.info('any info');
43-
chai_1.expect(lastSentryLog).to.equal(null);
44-
chai_1.expect(lastConsoleLog).to.deep.equal({
63+
it('should log info only at console and logstash', () => {
64+
const expectedLog = {
4565
level: 'info',
4666
message: 'any info'
47-
});
67+
};
68+
logger.info('any info');
69+
chai_1.expect(lastSentryLog).to.equal(null);
70+
chai_1.expect(lastConsoleLog).to.deep.equal(expectedLog);
71+
chai_1.expect(lastLogstashLog.application).to.equal('gupy');
72+
chai_1.expect(lastLogstashLog.message).to.equal('any info');
73+
chai_1.expect(lastLogstashLog.level).to.equal('info');
4874
chai_1.expect(lastConsoleLog[symbolMessage]).to.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2} \+\d{2}:\d{2} \[info]: any info/);
4975
chai_1.expect(lastConsoleLog[symbolLevel]).to.equal('info');
5076
});
51-
it('should log warn only at console', () => {
52-
logger.warn('any warn');
53-
chai_1.expect(lastSentryLog).to.equal(null);
54-
chai_1.expect(lastConsoleLog).to.deep.equal({
77+
it('should log warn only at console and logstash', () => {
78+
const expectedLog = {
5579
level: 'warn',
5680
message: 'any warn'
57-
});
81+
};
82+
logger.warn('any warn');
83+
chai_1.expect(lastSentryLog).to.equal(null);
84+
chai_1.expect(lastConsoleLog).to.deep.equal(expectedLog);
85+
chai_1.expect(lastLogstashLog.application).to.equal('gupy');
86+
chai_1.expect(lastLogstashLog.message).to.equal('any warn');
87+
chai_1.expect(lastLogstashLog.level).to.equal('warn');
5888
chai_1.expect(lastConsoleLog[symbolMessage]).to.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2} \+\d{2}:\d{2} \[warn]: any warn/);
5989
chai_1.expect(lastConsoleLog[symbolLevel]).to.equal('warn');
6090
});
61-
it('should log error at sentry and console', () => {
62-
logger.error('any error');
63-
chai_1.expect(lastSentryLog).to.deep.equal({
91+
it('should log error at all transport classes', () => {
92+
const expectedLog = {
6493
level: 'error',
6594
message: 'any error'
66-
});
95+
};
96+
logger.error('any error');
97+
chai_1.expect(lastLogstashLog.application).to.equal('gupy');
98+
chai_1.expect(lastLogstashLog.level).to.equal('error');
99+
chai_1.expect(lastLogstashLog.message).to.equal('any error');
100+
chai_1.expect(lastSentryLog).to.deep.equal(expectedLog);
67101
chai_1.expect(lastSentryLog[symbolMessage]).to.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2} \+\d{2}:\d{2} \[error]: any error/);
68102
chai_1.expect(lastSentryLog[symbolLevel]).to.equal('error');
69-
chai_1.expect(lastConsoleLog).to.be.deep.equal({
70-
level: 'error',
71-
message: 'any error'
72-
});
103+
chai_1.expect(lastConsoleLog).to.be.deep.equal(expectedLog);
73104
chai_1.expect(lastConsoleLog[symbolMessage]).to.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2} \+\d{2}:\d{2} \[error]: any error/);
74105
chai_1.expect(lastConsoleLog[symbolLevel]).to.equal('error');
75106
});

0 commit comments

Comments
 (0)