File size: 1,143 Bytes
d718096
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import logging
import inspect
import sys
from pathlib import Path

log_format = "[%(asctime)-12s-%(levelname)s] (%(name)s) %(message)s"

def get_logger(logger_name: str = None, log_level: str = 'info') -> logging.Logger:
    # Set up levels
    log_levels = logging._nameToLevel
    log_level = log_levels[log_level.upper()]
    
    # Set up logger format
    logger_name = logger_name or Path(inspect.getmodule(inspect.stack()[1][0]).__file__).name
    logger = logging.getLogger(logger_name.rstrip('.py'))
    logger.setLevel(log_level)
    formatter = logging.Formatter(fmt = log_format)
    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(formatter)
    
    
    # Set up exception hook
    if logger_name == 'main':
        def exception_hook(*args):
            gettrace = getattr(sys, 'gettrace', None)
            if not gettrace():
                logger.error('Uncaught exception:')
                logger.exception(args[-1], exc_info=args)
        sys.excepthook = exception_hook
            
    # Add handler to logger
    logger.addHandler(handler)
    logger.info(f"Created {logger = }")
    return logger