对于一个分布式应用,一个计算节点上可能产生一些日志,而为了便于将这些节点日志收集并分析,我们可以选择除了在本地生成日志外,还将某些级别的日志发送到日志服务器。

Python的logging模块可以用来对日志进行一些操作,其接口和著名的Java日志库log4j类似。logging.handlers支持一系列的日志处理方式,其中发送到日志服务器可以通过SocketHandler或者HttpHandler,不过本文既然选择了tornado,还是使用HttpHandler的方式。

首先,是分布式节点的部分。首先,我们通过get_logger方法得到logger对象,并向其添加HttpHandler。

    import logging

    logging_host = '127.0.0.1'
    logging_port = 8888
    logging_add_url = '/log/add/'

    def get_logger():
        logger = logging.getLogger()
       
        http_handler = logging.handlers.HTTPHandler(
            '%s:%s' % (logging_host, logging_port),
            logging_add_url,
            method='POST'
        )
        http_handler.setLevel(logging.ERROR)
        logger.addHandler(http_handler)
       
        return logger

代码还是很简单的,HTTPHandler接受三个参数,一个是服务器的host,日志发送到的url,以及是GET还是POST方式。这里省去了添加本地日志的过程。