From 45516a91d141a500f2f1c9375de5ba3fd69d8b5e Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Thu, 7 Jun 2018 08:19:01 +1000 Subject: [PATCH 1/2] chore: remove redis appender from core --- lib/appenders/redis.js | 51 ----------- package-lock.json | 31 ------- package.json | 1 - test/tap/redisAppender-test.js | 152 --------------------------------- 4 files changed, 235 deletions(-) delete mode 100644 lib/appenders/redis.js delete mode 100644 test/tap/redisAppender-test.js diff --git a/lib/appenders/redis.js b/lib/appenders/redis.js deleted file mode 100644 index 93f1637..0000000 --- a/lib/appenders/redis.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -/** - * This appender has been deprecated, and will be removed in version 3. - * Any bug fixes or improvements should be made against @log4js-node/redis - */ -const redis = require('redis'); -const util = require('util'); - -function redisAppender(config, layout) { - const host = config.host || '127.0.0.1'; - const port = config.port || 6379; - const auth = config.pass ? { auth_pass: config.pass } : {}; - const redisClient = redis.createClient(port, host, auth); - - redisClient.on('error', (err) => { - if (err) { - console.error(`log4js.redisAppender - ${host}:${port} Error: ${util.inspect(err)}`); - } - }); - - const appender = function (loggingEvent) { - const message = layout(loggingEvent); - redisClient.publish(config.channel, message, (err) => { - if (err) { - console.error(`log4js.redisAppender - ${host}:${port} Error: ${util.inspect(err)}`); - } - }); - }; - - appender.shutdown = (cb) => { - redisClient.quit(); - if (cb) cb(); - }; - - // trigger a deprecation warning. - appender.deprecated = '@logj4s-node/redis'; - - return appender; -} - -function configure(config, layouts) { - let layout = layouts.messagePassThroughLayout; - if (config.layout) { - layout = layouts.layout(config.layout.type, config.layout); - } - - return redisAppender(config, layout); -} - -module.exports.configure = configure; diff --git a/package-lock.json b/package-lock.json index a9b3621..a4b0a25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5691,37 +5691,6 @@ "strip-indent": "^2.0.0" } }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=", - "optional": true, - "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" - }, - "dependencies": { - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "optional": true - }, - "redis-commands": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.1.tgz", - "integrity": "sha1-gdgm9F+pyLIBH0zXoP5ZfSQdRCs=", - "optional": true - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", - "optional": true - } - } - }, "regexpp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", diff --git a/package.json b/package.json index 0793fde..7f7ddfa 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,6 @@ "validate-commit-msg": "^2.14.0" }, "optionalDependencies": { - "redis": "^2.7.1", "slack-node": "~0.2.0", "axios": "^0.15.3", "amqplib": "^0.5.2" diff --git a/test/tap/redisAppender-test.js b/test/tap/redisAppender-test.js deleted file mode 100644 index 8f9a0a0..0000000 --- a/test/tap/redisAppender-test.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict'; - -const test = require('tap').test; -const sandbox = require('@log4js-node/sandboxed-module'); -const appender = require('../../lib/appenders/redis'); - -function setupLogging(category, options) { - const fakeRedis = { - msgs: [], - createClient: function (port, host, optionR) { - this.port = port; - this.host = host; - this.optionR = optionR; - - return { - on: function (event, callback) { - fakeRedis.errorCb = callback; - }, - publish: function (channel, message, callback) { - fakeRedis.msgs.push({ channel: channel, message: message }); - fakeRedis.publishCb = callback; - }, - quit: function () { - fakeRedis.quitCalled = true; - }, - }; - } - }; - - const fakeConsole = { - log: () => {}, - errors: [], - error: function (msg) { - this.errors.push(msg); - } - }; - - const log4js = sandbox.require('../../lib/log4js', { - requires: { - redis: fakeRedis - }, - globals: { - console: fakeConsole - } - }); - log4js.configure({ - appenders: { redis: options }, - categories: { default: { appenders: ['redis'], level: 'trace' } } - }); - - return { - logger: log4js.getLogger(category), - log4js: log4js, - fakeRedis: fakeRedis, - fakeConsole: fakeConsole - }; -} - -test('log4js redisAppender', (batch) => { - batch.test('should export a configure function', (t) => { - t.type(appender.configure, 'function'); - t.end(); - }); - - batch.test('redis setup', (t) => { - const result = setupLogging('redis setup', { - host: '123.123.123.123', - port: 1234, - pass: '123456', - channel: 'log', - type: 'redis', - layout: { - type: 'pattern', - pattern: 'cheese %m' - } - }); - - result.logger.info('Log event #1'); - result.fakeRedis.publishCb(); - - t.test('redis credentials should match', (assert) => { - assert.equal(result.fakeRedis.host, '123.123.123.123'); - assert.equal(result.fakeRedis.port, 1234); - assert.equal(result.fakeRedis.optionR.auth_pass, '123456'); - assert.equal(result.fakeRedis.msgs.length, 1, 'should be one message only'); - assert.equal(result.fakeRedis.msgs[0].channel, 'log'); - assert.equal(result.fakeRedis.msgs[0].message, 'cheese Log event #1'); - assert.end(); - }); - - t.end(); - }); - - batch.test('default values', (t) => { - const setup = setupLogging('defaults', { - type: 'redis', - channel: 'thing' - }); - - setup.logger.info('just testing'); - setup.fakeRedis.publishCb(); - - t.test('should use localhost', (assert) => { - assert.equal(setup.fakeRedis.host, '127.0.0.1'); - assert.equal(setup.fakeRedis.port, 6379); - assert.same(setup.fakeRedis.optionR, {}); - assert.end(); - }); - - t.test('should use message pass through layout', (assert) => { - assert.equal(setup.fakeRedis.msgs.length, 1); - assert.equal(setup.fakeRedis.msgs[0].channel, 'thing'); - assert.equal(setup.fakeRedis.msgs[0].message, 'just testing'); - assert.end(); - }); - - t.end(); - }); - - batch.test('redis errors', (t) => { - const setup = setupLogging('errors', { type: 'redis', channel: 'testing' }); - - setup.fakeRedis.errorCb('oh no, error on connect'); - setup.logger.info('something something'); - setup.fakeRedis.publishCb('oh no, error on publish'); - - t.test('should go to the console', (assert) => { - assert.equal(setup.fakeConsole.errors.length, 3); - assert.equal( - setup.fakeConsole.errors[1], - 'log4js.redisAppender - 127.0.0.1:6379 Error: \'oh no, error on connect\'' - ); - assert.equal( - setup.fakeConsole.errors[2], - 'log4js.redisAppender - 127.0.0.1:6379 Error: \'oh no, error on publish\'' - ); - assert.end(); - }); - t.end(); - }); - - batch.test('shutdown', (t) => { - const setup = setupLogging('shutdown', { type: 'redis', channel: 'testing' }); - - setup.log4js.shutdown(() => { - t.ok(setup.fakeRedis.quitCalled); - t.end(); - }); - }); - - batch.end(); -}); From d23f1af82bace78fb4ac70e2263337716c06113d Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Thu, 7 Jun 2018 08:22:04 +1000 Subject: [PATCH 2/2] chore: removed non-core appenders from types --- types/log4js.d.ts | 81 ----------------------------------------------- 1 file changed, 81 deletions(-) diff --git a/types/log4js.d.ts b/types/log4js.d.ts index 5cde881..f55561f 100644 --- a/types/log4js.d.ts +++ b/types/log4js.d.ts @@ -168,24 +168,6 @@ export interface DateFileAppender { daysToKeep?: number; } -export interface HipchatAppender { - type: 'hipchat'; - // User token with notification privileges - hipchat_token: string; - // Room ID or name - hipchat_room: string; - // (defaults to empty string) - a label to say where the message is from - hipchat_from?: string; - // (defaults to false) - make hipchat annoy people - hipchat_notify?: boolean; - // (defaults to api.hipchat.com) - set this if you have your own hipchat server - hipchat_host?: string; - // (defaults to only throwing errors) - implement this function if you want intercept the responses from hipchat - hipchat_response_callback?(err: Error, response: any): any; - // (defaults to messagePassThroughLayout) - layout?: Layout; -} - export interface LogFacesHTTPAppender { type: 'logFaces-HTTP'; // logFaces receiver servlet URL @@ -238,20 +220,6 @@ export interface MultiprocessAppender { loggerHost?: string; } -export interface RedisAppender { - type: 'redis'; - // (defaults to 127.0.0.1) - the location of the redis server - host?: string; - // (defaults to 6379) - the port the redis server is listening on - port?: number; - // password to use when authenticating connection to redis - pass?: string; - // the redis channel that log events will be published to - channel: string; - // (defaults to messagePassThroughLayout) - the layout to use for log events. - layout?: Layout; -} - export interface SlackAppender { type: 'slack'; // your Slack API token (see the slack and slack-node docs) @@ -270,52 +238,6 @@ export interface RecordingAppender { type: 'recording'; } -export interface SmtpAppender { - type: 'smtp'; - // (if not present will use transport field) - SMTP?: { - // (defaults to localhost) - host?: string; - // (defaults to 25) - port?: number; - // authentication details - auth?: { - user: string; - pass: string; - }; - }; - // (if not present will use SMTP) - see nodemailer docs for transport options - transport?: { - // (defaults to smtp) - the nodemailer transport plugin to use - plugin?: string; - // configuration for the transport plugin - options?: any; - } | string; - // send logs as email attachment - attachment?: { - // (defaults to false) - enable?: boolean; - // (defaults to See logs as attachment) - message to put in body of email - message: string; - // (defaults to default.log) - attachment filename - filename: string; - }; - // integer(defaults to 0) - batch emails and send in one email every sendInterval seconds, if 0 then every log message will send an email. - sendInterval?: number; - // (defaults to 5) - time in seconds to wait for emails to be sent during shutdown - shutdownTimeout?: number; - // email addresses to send the logs to - recipients: string; - // (defaults to message from first log event in batch) - subject for email - subject?: string; - // who the logs should be sent as - sender?: string; - // (defaults to false) - send the email as HTML instead of plain text - html?: boolean; - // (defaults to basicLayout) - layout?: Layout; -} - export interface StandardErrorAppender { type: 'stderr'; // (defaults to colouredLayout) @@ -338,16 +260,13 @@ export type Appender = CategoryFilterAppender | FileAppender | SyncfileAppender | DateFileAppender - | HipchatAppender | LogFacesHTTPAppender | LogFacesUDPAppender | LogLevelFilterAppender | MultiFileAppender | MultiprocessAppender - | RedisAppender | SlackAppender | RecordingAppender - | SmtpAppender | StandardErrorAppender | StandardOutputAppender | CustomAppender;