From a9ce61adbcf0d7f3833db4973f66711ff0edaf66 Mon Sep 17 00:00:00 2001
From: Nikolay Stanchev <ns17@it-innovation.soton.ac.uk>
Date: Sun, 3 Jun 2018 02:00:50 +0100
Subject: [PATCH] Added logging exceptions thrown by the aggregator

---
 src/service/clmcservice/aggregator.py | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/service/clmcservice/aggregator.py b/src/service/clmcservice/aggregator.py
index c4aadb5..1f796dd 100644
--- a/src/service/clmcservice/aggregator.py
+++ b/src/service/clmcservice/aggregator.py
@@ -28,7 +28,6 @@ from time import time, sleep
 from urllib.parse import urlparse
 from clmcservice.utilities import generate_e2e_delay_report
 import getopt
-import sys
 import logging
 
 
@@ -51,7 +50,7 @@ class Aggregator(object):
         """
 
         if logger is None:
-            self.log = logging.getLogger('aggregator')
+            self.log = logging.getLogger(__name__)
         else:
             self.log = logger
 
@@ -182,12 +181,27 @@ class Aggregator(object):
 
 
 if __name__ == '__main__':
+    # initialise a file logger, only when module's main method is run (NOT when aggregator class is imported somewhere else)
     log = logging.getLogger('aggregator')
     hdlr = logging.FileHandler('/var/log/clmcservice/aggregator.log', mode='a')
     formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
     hdlr.setFormatter(formatter)
     log.addHandler(hdlr)
-    log.setLevel(logging.INFO)
+    log.setLevel(logging.DEBUG)
+
+    # log all errors that are thrown in the execution of the aggregator with the logger object initialized above
+    import sys
+    import traceback
+
+    def report_error(error_type, error_value, error_traceback, log_object=log):
+        log_object.error("Uncaught error thrown!")
+        log_object.error("Error type: {0}".format(error_type))
+        log_object.error("Error value: {0}".format(error_value))
+        log_object.debug("Error traceback:")
+        for trace in traceback.format_tb(error_traceback):
+            log_object.debug(trace)
+
+    sys.excepthook = report_error
 
     # Parse command line options
     try:
-- 
GitLab