-
Notifications
You must be signed in to change notification settings - Fork 94
/
Copy pathezlog.py
85 lines (58 loc) · 2.02 KB
/
ezlog.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import os
import logging
import inspect
import io
my_path = os.path.dirname(__file__)
def color_str(obj, code="\033[0;36m"):
return code + str(obj) + '\033[0m'
_configured = False
def configure_logging(stdio_level=logging.INFO,
file_level=logging.DEBUG,
filename=".easy.log",
filepath=os.path.join(my_path, "logs")):
os.makedirs(filepath, exist_ok=True)
filename = os.path.join(filepath, filename)
global _configured
if _configured:
warning("Re-configuring logging")
stdio_handler = logging.StreamHandler()
stdio_handler.setLevel(stdio_level)
file_hanlder = logging.FileHandler(filename)
file_hanlder.setLevel(file_level)
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(name)s - %(message).200s",
datefmt="%m/%d/%Y %H:%M:%S",
level=min(stdio_level, file_level),
handlers=[stdio_handler, file_hanlder]
)
_configured = True
_get_or_create_logger().debug("Configured logging")
_loggers = {}
def _get_or_create_logger():
global _configured, _loggers
if not _configured:
configure_logging()
try:
for frame in inspect.stack():
name = inspect.getmodule(frame[0]).__name__
if name != __name__:
break
except:
name = "_"
if name not in _loggers:
_loggers[name] = logging.getLogger(name)
return _loggers[name]
def print_to_string(*args, end="", **kwargs):
with io.StringIO() as buf:
print(*args, file=buf, end=end, **kwargs)
return buf.getvalue()
def debug(*args, **kwargs):
_get_or_create_logger().debug(print_to_string(*args, **kwargs))
def info(*args, **kwargs):
_get_or_create_logger().info(print_to_string(*args, **kwargs))
log = info
def warning(*args, **kwargs):
_get_or_create_logger().warning(print_to_string(*args, **kwargs))
warn = warning
def error(*args, **kwargs):
_get_or_create_logger().error(print_to_string(*args, **kwargs))