-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlogger_module.py
35 lines (30 loc) · 1.2 KB
/
logger_module.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import logging
import time
import datetime
# subclass of logging.Formatter
# https://stackoverflow.com/questions/25194864/python-logging-time-since-start-of-program
class RuntimeFormatter(logging.Formatter):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.start_time = time.time()
def formatTime(self, record, datefmt=None):
duration = datetime.datetime.utcfromtimestamp(record.created - self.start_time)
elapsed = duration.strftime('%H:%M:%S.%f')[:-3]
return "{}".format(elapsed)
def fmt_filter(record):
record.lineno = f'{record.lineno})'
record.filename = f'({record.filename}:'
return True
def set_logging():
logger = logging.getLogger()
logger.handlers = []
logger.setLevel(level=logging.DEBUG)
handler = logging.FileHandler("output.log", mode='w')
handler.setLevel(level=logging.DEBUG)
formatter = RuntimeFormatter('[%(asctime)s]%(filename)15s%(lineno)-4s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.addFilter(fmt_filter)
return logger
# start logger from here to prevent create a logger instance for every test file
logger = set_logging()