8f90651e6c8296e04ffe1ddd5ae1919aaba1595e
[nitsi.git] / src / nitsi / logger.py
1 #!/usr/bin/python3
2
3 import logging
4 import os
5 import time
6
7 logger = logging.getLogger("nitsi.logger")
8
9 class Logger_Exeception(BaseException):
10     pass
11
12 # This function should create the necessary folders
13 # and touch the logging files
14 def init_logging(path):
15     logger.debug("Init logging directory")
16     if not os.path.isdir(path):
17         logger.error("{} is not a valid directory".format(path))
18
19     try:
20         path = os.path.abspath(path)
21     except BaseException as e:
22         logger.error("Failed to get the absolute path for: {}".format(path))
23
24     log_dir = "{}/log".format(path)
25
26     if not os.path.exists(log_dir):
27         os.mkdir(log_dir)
28
29     time_dir = log_dir + "/" + time.strftime("%Y-%m-%d_%H-%M-%S" ,time.gmtime(time.time()))
30
31     if os.path.exists(time_dir):
32         logger.error("Path {} alreday exist".format(time_dir))
33         raise Logger_Exeception
34     else:
35         os.mkdir(time_dir)
36
37     return time_dir
38
39
40 class TestFormatter(logging.Formatter):
41     def __init__(self, start_time=None, name=None):
42         super().__init__(fmt="[%(asctime)s] %(message)s")
43         logger.debug("Initiating TestFormatter for")
44         if start_time == None:
45             self.starttime = time.time()
46         else:
47             self.starttime = start_time
48
49         if name == None:
50             self.name = ""
51         else:
52             self.name = name
53
54     def converter(self, recordtime):
55
56         # This returns a timestamp relatively to the time when we started
57         # the test.
58
59         recordtime -= self.starttime
60
61         return time.gmtime(recordtime)
62
63     def format(self, record):
64         return "[{}][{}] {}".format(self.formatTime(record), self.name, record.getMessage())
65
66     def formatTime(self, record, datefmt=None):
67         ct = self.converter(record.created)
68         t = time.strftime("%H:%M:%S", ct)
69         s = "{}.{:03d}".format(t, round(record.msecs,None))
70         return s