相关疑难解决方法(0)

将sys.stdout重定向到python日志记录

所以现在我们有很多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)

python logging

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

logging ×1

python ×1