-
Notifications
You must be signed in to change notification settings - Fork 433
Expand file tree
/
Copy pathlog.py
More file actions
47 lines (38 loc) · 1.28 KB
/
log.py
File metadata and controls
47 lines (38 loc) · 1.28 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
import sys
import logging
import os
import inspect
TRACE = 25
def log_init(log_file, trace = False):
# set level
logger = logging.getLogger()
if trace:
logger.setLevel(TRACE)
else:
logger.setLevel(logging.WARNING)
global file_handler
# create handlers
stderr_handler = logging.StreamHandler(sys.stderr)
file_handler = logging.FileHandler(log_file)
# create formatter and attach to handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
stderr_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# add handlers
logger.addHandler(stderr_handler)
logger.addHandler(file_handler)
# force flushing so programs which hang still produce output
if os.getenv("QUARTO_JUPYTER_FLUSH_LOGS"):
def log(level, msg):
logging.getLogger().log(level, msg)
file_handler.flush()
else:
def log(level, msg):
logging.getLogger().log(level, msg)
def log_error(msg, exc_info = False, stack_info = None):
if stack_info is None:
stack_info = not exc_info
logging.getLogger().log(logging.ERROR, msg, exc_info = exc_info, stack_info = stack_info)
def trace(msg):
prev_frame = inspect.stack()[1]
log(TRACE, "%s:%s - %s" % (prev_frame.filename, prev_frame.lineno, msg))