From 2242cca64aaa6694260840ea867c0016360749fb Mon Sep 17 00:00:00 2001
From: Richard Petersen <richard.petersen@open-xchange.com>
Date: Wed, 8 Sep 2021 10:37:25 +0200
Subject: [PATCH] Fix: Environment variables for logging are not respected and
 prevent service from starting

---
 src/createApp.js |  6 ++++--
 src/index.js     |  4 ++--
 src/logger.js    | 14 +++++++++++---
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/createApp.js b/src/createApp.js
index c622bca..e4cca76 100644
--- a/src/createApp.js
+++ b/src/createApp.js
@@ -6,7 +6,7 @@ import express from 'express'
 import helmet from 'helmet'
 
 // Fastest HTTP logger for Node.js in town
-import { logger } from './logger.js'
+import { getLogger } from './logger.js'
 import pinoHttp from 'pino-http'
 // Readiness and liveness checks middleware
 import health from '@cloudnative/health-connect'
@@ -21,7 +21,6 @@ import fs from 'fs'
 import { getDependencies, getOxManifests } from './manifests.js'
 
 const ignorePaths = ['/ready', '/healthy']
-const httpLogger = pinoHttp({ logger, autoLogging: { ignorePaths } })
 const swaggerDocument = yaml.load(fs.readFileSync('./src/swagger.yaml', 'utf8'))
 const bypass = (request) => ignorePaths.includes(request.path)
 const metricsMiddleware = promBundle({ bypass })
@@ -31,6 +30,9 @@ export function createApp () {
 
   const app = express()
 
+  const logger = getLogger()
+  const httpLogger = pinoHttp({ logger, autoLogging: { ignorePaths } })
+
   const healthCheck = new health.HealthChecker()
 
   // Application-level middleware
diff --git a/src/index.js b/src/index.js
index 6a77b12..84dbe3a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,7 +1,7 @@
 // Add env vars from files
 // Note: actual env vars supersede .env file and .env file supersedes .env.defaults file
 import { config } from 'dotenv-defaults'
-import { logger } from './logger.js'
+import { getLogger } from './logger.js'
 import { createApp } from './createApp.js'
 
 config()
@@ -10,5 +10,5 @@ const app = createApp()
 
 // Binds and listens for connections on the specified host and port
 app.listen(process.env.PORT, () => {
-  logger.info(`manifest-service listening on port ${process.env.PORT}`)
+  getLogger().info(`manifest-service listening on port ${process.env.PORT}`)
 })
diff --git a/src/logger.js b/src/logger.js
index 2d6267c..ba77c1f 100644
--- a/src/logger.js
+++ b/src/logger.js
@@ -1,6 +1,14 @@
 // Very low overhead Node.js logger. Logs in json use pino-pretty for dev.
 import Logger from 'pino'
 
-export const logger = new Logger({
-  level: process.env.LOG_LEVEL
-})
+export const getLogger = (() => {
+  let logger
+  return function getLogger () {
+    if (!logger) {
+      logger = new Logger({
+        level: process.env.LOG_LEVEL
+      })
+    }
+    return logger
+  }
+})()
-- 
GitLab