import logging
import os
from . import yfc_cache_manager as yfcm
yfc_logging_mode = None
[docs]
def EnableLogging(mode=logging.INFO):
global yfc_logging_mode
ok_values = [logging.INFO, logging.DEBUG]
if mode not in ok_values:
raise Exception('Logging mode must be one of:', ok_values)
yfc_logging_mode = mode
[docs]
def DisableLogging():
global yfc_logging_mode
yfc_logging_mode = None
[docs]
def IsLoggingEnabled():
global yfc_logging_mode
return yfc_logging_mode is not None
loggers = {}
[docs]
def GetLogger(tkr):
if tkr in loggers:
return loggers[tkr]
global yfc_logging_mode
tkr_dp = os.path.join(yfcm.GetCacheDirpath(), tkr)
if not os.path.isdir(tkr_dp):
os.mkdir(tkr_dp)
log_fp = os.path.join(tkr_dp, "events.log")
formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
log_file_handler = logging.FileHandler(log_fp, mode='a')
log_file_handler.setFormatter(formatter)
# screen_handler = logging.StreamHandler(stream=sys.stdout)
# screen_handler.setFormatter(formatter)
logger = logging.getLogger(tkr)
logger.setLevel(yfc_logging_mode)
logger.addHandler(log_file_handler)
logger.propagate = False
loggers[tkr] = logger
return logger
yfc_trace_mode = False
[docs]
def EnableTracing():
global yfc_trace_mode
yfc_trace_mode = True
[docs]
def DisableTracing():
global yfc_trace_mode
yfc_trace_mode = False
[docs]
def IsTracingEnabled():
global yfc_trace_mode
return yfc_trace_mode
[docs]
class Tracer:
def __init__(self):
self._trace_depth = 0
[docs]
def Print(self, log_msg):
if not IsTracingEnabled():
return
print(" "*self._trace_depth*2 + log_msg)
[docs]
def Enter(self, log_msg):
if not IsTracingEnabled():
return
self.Print(log_msg)
self._trace_depth += 1
if self._trace_depth > 20:
raise Exception("infinite recursion detected")
[docs]
def Exit(self, log_msg):
if not IsTracingEnabled():
return
self._trace_depth -= 1
self.Print(log_msg)
tc = Tracer()
[docs]
def TraceEnter(log_msg):
global tc
tc.Enter(log_msg)
[docs]
def TracePrint(log_msg):
global tc
tc.Print(log_msg)
[docs]
def TraceExit(log_msg):
global tc
tc.Exit(log_msg)