所以现在我们有很多python脚本,我们正在尝试整合它们并修复和裁员.我们要做的一件事是确保所有sys.stdout/sys.stderr进入python日志记录模块.
现在最重要的是,我们希望打印出以下内容:
[<ERROR LEVEL>] | <TIME> | <WHERE> | <MSG>
Run Code Online (Sandbox Code Playgroud)
现在所有的python错误消息中的所有sys.stdout/sys.stderr消息的格式都是[LEVEL] - MSG,它们都是使用sys.stdout/sys.stderr编写的.我可以在我的sys.stdout包装器和sys.stderr包装器中解析这个问题.然后根据解析的输入调用相应的日志记录级别.
所以基本上我们有一个名为foo的包,以及一个名为log的子包.在__init__.py我们定义以下内容:
def initLogging(default_level = logging.INFO, stdout_wrapper = None, \
stderr_wrapper = None):
"""
Initialize the default logging sub system
"""
root_logger = logging.getLogger('')
strm_out = logging.StreamHandler(sys.__stdout__)
strm_out.setFormatter(logging.Formatter(DEFAULT_LOG_TIME_FORMAT, \
DEFAULT_LOG_TIME_FORMAT))
root_logger.setLevel(default_level)
root_logger.addHandler(strm_out)
console_logger = logging.getLogger(LOGGER_CONSOLE)
strm_out = logging.StreamHandler(sys.__stdout__)
#strm_out.setFormatter(logging.Formatter(DEFAULT_LOG_MSG_FORMAT, \
# DEFAULT_LOG_TIME_FORMAT))
console_logger.setLevel(logging.INFO)
console_logger.addHandler(strm_out)
if stdout_wrapper:
sys.stdout = stdout_wrapper
if stderr_wrapper:
sys.stderr = stderr_wrapper
def cleanMsg(msg, is_stderr = False):
logy = logging.getLogger('MSG')
msg = msg.rstrip('\n').lstrip('\n')
p_level …Run Code Online (Sandbox Code Playgroud)