Просмотр исходного кода

Fix RequestLogger object lifecycle

Simon Detheridge 6 лет назад
Родитель
Сommit
035364b62e
2 измененных файлов с 17 добавлено и 20 удалено
  1. 1 2
      services/filestore/app.js
  2. 16 18
      services/filestore/app/js/RequestLogger.js

+ 1 - 2
services/filestore/app.js

@@ -16,8 +16,7 @@ const RequestLogger = require('./app/js/RequestLogger')
 
 const app = express()
 
-const requestLogger = new RequestLogger()
-requestLogger.attach(app)
+RequestLogger.attach(app)
 
 if (settings.sentry && settings.sentry.dsn) {
   logger.initializeErrorReporting(settings.sentry.dsn)

+ 16 - 18
services/filestore/app/js/RequestLogger.js

@@ -3,18 +3,24 @@ const metrics = require('metrics-sharelatex')
 
 class RequestLogger {
   constructor() {
-    this.errorHandler = this.errorHandler.bind(this)
-    this.middleware = this.middleware.bind(this)
     this._logInfo = {}
     this._logMessage = 'http request'
   }
 
-  attach(app) {
-    app.use(this.middleware)
-    app.use(this.errorHandler)
+  addFields(fields) {
+    Object.assign(this._logInfo, fields)
+  }
+
+  setMessage(message) {
+    this._logMessage = message
+  }
+
+  static attach(app) {
+    app.use(RequestLogger.middleware)
+    app.use(RequestLogger.errorHandler)
   }
 
-  errorHandler(err, req, res, next) {
+  static errorHandler(err, req, res, next) {
     this._logInfo.error = err
     res
       .send(err.message)
@@ -22,17 +28,9 @@ class RequestLogger {
       .end()
   }
 
-  addFields(fields) {
-    Object.assign(this._logInfo, fields)
-  }
-
-  setMessage(message) {
-    this._logMessage = message
-  }
-
-  middleware(req, res, next) {
+  static middleware(req, res, next) {
     const startTime = new Date()
-    req.requestLogger = this
+    req.requestLogger = new RequestLogger()
 
     // override the 'end' method to log and record metrics
     const end = res.end
@@ -77,9 +75,9 @@ class RequestLogger {
             statusCode: res.statusCode,
             'response-time': responseTime
           },
-          info: this._logInfo
+          info: req.requestLogger._logInfo
         },
-        this._logMessage
+        req.requestLogger._logMessage
       )
     }