-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.py
More file actions
51 lines (42 loc) · 1.62 KB
/
logger.py
File metadata and controls
51 lines (42 loc) · 1.62 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
"""Custom logging class and setup function"""
import sys
import logging
from logging import INFO
class IPDLogger(logging.Logger):
"""Custom logger class with support for tqdm progress bar"""
def __init__(self, name, level=INFO):
logging.Logger.__init__(self, name, level)
self.tqdm = None
# If tdqm progress bar is not set, we just write regular log messages
def set_tqdm(self, tdqm):
"""Sets the tqdm progress bar"""
self.tqdm = tdqm
def set_tqdm_description(self, desc, loglevel=INFO):
"""Set tqdm progress bar description, fallback to logging"""
if self.tqdm is None:
self.log(loglevel, desc)
else:
self.tqdm.set_description(desc)
def tqdm_write(self, message, loglevel=INFO):
"""Write to tqdm progress bar, fallback to logging"""
if self.tqdm is None:
self.log(loglevel, message)
else:
self.tqdm.write(message)
def setup_logger():
"""Set up logger and add stdout handler"""
logging.setLoggerClass(IPDLogger)
logger = logging.getLogger("icloudpd")
has_stdout_handler = False
for handler in logger.handlers:
if handler.name == "stdoutLogger":
has_stdout_handler = True
if not has_stdout_handler:
formatter = logging.Formatter(
fmt="%(asctime)s %(levelname)-8s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S")
stdout_handler = logging.StreamHandler(stream=sys.stdout)
stdout_handler.setFormatter(formatter)
stdout_handler.name = "stdoutLogger"
logger.addHandler(stdout_handler)
return logger