1 | from logging import Logger
|
---|
2 | import logging
|
---|
3 | from typing import cast
|
---|
4 |
|
---|
5 | from tudelft_utilities_logging.Reporter import Reporter
|
---|
6 |
|
---|
7 |
|
---|
8 | # initialize the logging, otherwise it seems not to work properly
|
---|
9 | logging.basicConfig()
|
---|
10 |
|
---|
11 | class ReportToLogger ( Reporter ):
|
---|
12 | '''
|
---|
13 | dumps the reported messages into a log file with the
|
---|
14 | given name.
|
---|
15 | This really tries hard to avoid any writing to
|
---|
16 | stdout/stderr, because those are used
|
---|
17 | for the communicatino to the party.
|
---|
18 | '''
|
---|
19 |
|
---|
20 | def __init__(self, logname:str):
|
---|
21 | '''
|
---|
22 | @param logname the name for the Logger
|
---|
23 | '''
|
---|
24 | self._logger:Logger = logging.getLogger(logname)
|
---|
25 | # HACK to remove parent. Parent prints to stdout and
|
---|
26 | # preventing that is exactly why we have a logger here.
|
---|
27 | self._logger.parent=cast(Logger, None)
|
---|
28 | handler = logging.FileHandler(logname+".log")
|
---|
29 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
---|
30 | handler.setFormatter(formatter)
|
---|
31 | self._logger.addHandler(handler)
|
---|
32 | self._logger.setLevel(logging.INFO)
|
---|
33 |
|
---|
34 | def log(self, level:int , msg:str, thrown: BaseException=None) -> None:
|
---|
35 | # We use the internal function, the only way to include our exception...
|
---|
36 | self._logger._log(level=level, msg=msg, args=[], exc_info=thrown,\
|
---|
37 | stack_info=True if thrown else False)
|
---|
38 |
|
---|
39 |
|
---|
40 | |
---|