Skip to content

Commit 62c73de

Browse files
authored
Merge pull request #378 from DEFRA/feat/df-1026-max-listeners-exceeded
feat/df-1026: createLogger() as a singleton
2 parents 0d7e455 + bf13567 commit 62c73de

12 files changed

Lines changed: 16 additions & 34 deletions

File tree

src/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { getErrorMessage } from '@defra/forms-model'
22

33
import { config } from '~/src/config/index.js'
4-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
4+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
55
import { createServer } from '~/src/server/index.js'
66

7-
const logger = createLogger()
8-
97
process.on('unhandledRejection', (error) => {
108
const err = getErrorMessage(error)
119
logger.info('Unhandled rejection')

src/server/common/helpers/logging/logger.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ import { pino } from 'pino'
22

33
import { loggerOptions } from '~/src/server/common/helpers/logging/logger-options.js'
44

5-
export function createLogger() {
5+
function createPinoLogger() {
66
return pino(loggerOptions)
77
}
8+
9+
// Singleton logger instance - pino adds 'exit' listeners to process,
10+
// so we reuse a single instance to avoid MaxListenersExceededWarning
11+
export const logger = createPinoLogger()

src/server/common/helpers/redis-client.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getErrorMessage } from '@defra/forms-model'
22
import { Cluster, Redis } from 'ioredis'
33

44
import { config } from '~/src/config/index.js'
5-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
5+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
66

77
/**
88
* Setup Redis and provide a redis client
@@ -11,8 +11,6 @@ import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
1111
* Out in the wild - Elasticache / Redis Cluster with username and password
1212
*/
1313
export function buildRedisClient() {
14-
const logger = createLogger()
15-
1614
const port = 6379
1715
const db = 0
1816
const redisConfig = config.get('redis')

src/server/plugins/engine/components/PaymentField.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
import { StatusCodes } from 'http-status-codes'
88
import joi, { type ObjectSchema } from 'joi'
99

10-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
10+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
1111
import { COMPONENT_STATE_ERROR } from '~/src/server/constants.js'
1212
import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'
1313
import { type PaymentState } from '~/src/server/plugins/engine/components/PaymentField.types.js'
@@ -40,8 +40,6 @@ import {
4040
formatCurrency
4141
} from '~/src/server/plugins/payment/helper.js'
4242

43-
const logger = createLogger()
44-
4543
export class PaymentField extends FormComponent {
4644
declare options: PaymentFieldComponent['options']
4745
declare formSchema: ObjectSchema

src/server/plugins/engine/helpers.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { StatusCodes } from 'http-status-codes'
1515
import { type Schema, type ValidationErrorItem } from 'joi'
1616
import { Liquid } from 'liquidjs'
1717

18-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
18+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
1919
import { FORM_VERSION_METADATA_KEY } from '~/src/server/constants.js'
2020
import {
2121
getAnswer,
@@ -37,8 +37,6 @@ import {
3737
type FormResponseToolkit
3838
} from '~/src/server/routes/types.js'
3939

40-
const logger = createLogger()
41-
4240
export const engine = new Liquid({
4341
outputEscape: 'escape',
4442
jsTruthy: true,

src/server/plugins/engine/models/FormModel.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { add, format } from 'date-fns'
2828
import { Parser, type Value } from 'expr-eval-fork'
2929
import joi from 'joi'
3030

31-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
31+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
3232
import { type ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'
3333
import {} from '~/src/server/plugins/engine/components/YesNoField.js'
3434
import {
@@ -61,8 +61,6 @@ import { FormAction } from '~/src/server/routes/types.js'
6161
import { merge } from '~/src/server/services/cacheService.js'
6262
import { type Services } from '~/src/server/types.js'
6363

64-
const logger = createLogger()
65-
6664
export class FormModel {
6765
/** The runtime engine that should be used */
6866
engine?: Engine

src/server/plugins/engine/options.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { getErrorMessage } from '@defra/forms-model'
22
import Joi from 'joi'
33

4-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
4+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
55
import { CacheService } from '~/src/server/services/index.js'
66

7-
const logger = createLogger()
8-
97
const pluginRegistrationOptionsSchema = Joi.object({
108
model: Joi.object().optional(),
119
services: Joi.object().optional(),

src/server/plugins/engine/routes/payment.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Boom from '@hapi/boom'
22
import { StatusCodes } from 'http-status-codes'
33
import Joi from 'joi'
44

5-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
5+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
66
import { EXTERNAL_STATE_APPENDAGE } from '~/src/server/constants.js'
77
import { getPluginOptions } from '~/src/server/plugins/engine/helpers.js'
88
import {
@@ -14,8 +14,6 @@ import {
1414
export const PAYMENT_RETURN_PATH = '/payment-callback'
1515
export const PAYMENT_SESSION_PREFIX = 'payment-'
1616

17-
const logger = createLogger()
18-
1917
/**
2018
* Flash form component state after successful payment
2119
* @param {Request} request - the request

src/server/plugins/map/service.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { getErrorMessage } from '@defra/forms-model'
22
import Boom from '@hapi/boom'
33

4-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
4+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
55
import { getJson } from '~/src/server/services/httpService.js'
66

7-
const logger = createLogger()
8-
97
/**
108
* Returns an empty result set
119
*/

src/server/plugins/nunjucks/context.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ import Boom from '@hapi/boom'
55
import { StatusCodes } from 'http-status-codes'
66

77
import { config } from '~/src/config/index.js'
8-
import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
8+
import { logger } from '~/src/server/common/helpers/logging/logger.js'
99
import {
1010
checkFormStatus,
1111
encodeUrl
1212
} from '~/src/server/plugins/engine/helpers.js'
1313

14-
const logger = createLogger()
15-
1614
/** @type {Record<string, string> | undefined} */
1715
let webpackManifest
1816

0 commit comments

Comments
 (0)