likes
comments
collection
share

tornado 并发编程系列(4)——日志配置

作者站长头像
站长
· 阅读数 12

使用Loguru实现Tornado的日志动态转发

在Tornado的应用程序中,通常需要记录日志以调试程序和记录有用的信息。Tornado 提供了一些默认的日志处理程序,但是实际上用户可以使用任何支持Python的日志记录库。在本文中,我们将介绍如何使用Loguru实现Tornado日志的配置和动态转发。Loguru是一个简单而强大的Python日志记录库,它提供了易于使用的API和灵活的配置选项,可帮助您在开发和调试时更有效地使用日志。

安装Loguru

Loguru是一个开源Python日志包,使用pip即可安装:


pip install loguru

导入Loguru

在Tornado应用程序中,导入loguru模块:


from loguru import logger

配置Loguru

我们将使用一个名为setup_loggers的函数设置Loguru。在这个函数中,我们将根据特定的配置设置不同位置的日志记录器。在本例中,我们将代替在Tornado应用程序中定义我们的日志系统,每个日志具有不同的格式和输出。


def setup_loggers(settings):

    time_name = ".{time:YYYY-MM-DD}"

  


    ## 设置server_log

    server_log = os.path.join(settings.service.server_log.server_path,

                              settings.service.server_log.server_name)

    logger.add(server_log + time_name, rotation="00:00",

               filter=PathFilter(settings.service.server_log.server_type), format=formatter, enqueue=True)

  


    # detail_log

    detail_log = os.path.join(settings.service.detail_log.detail_path,

                              settings.service.detail_log.detail_name)

    logger.add(detail_log + time_name, rotation="00:00",

               filter=PathFilter(settings.service.detail_log.detail_type), format=formatter, enqueue=True)

  


    ## 设置data_log

    data_log = os.path.join(settings.service.data_log.data_path, settings.service.data_log.data_name)

    logger.add(data_log + time_name, rotation="00:00",

               filter=PathFilter(settings.service.data_log.data_type), format=formatter, enqueue=True)

这个函数接受一个settings参数,该参数包含有关日志系统的配置信息。我们使用os.path来拼接和管理不同位置日志文件的路径信息,并创建了一个输出文件位置,路径过滤器方法,格式等。

转发日志

日志配置完成后,我们可以使用Tornado中的Loguru函数来访问记录器对象,以便在代码中的任何位置记录日志。可以使用get_logger函数获取已经定义好的日志记录器的路径。


def get_logger(path):

    return logger.bind(path=path)

在您的Tornado应用程序的任何部分,使用get_logger函数可以获取已经定义好的logger,记录你需要的信息。


logger = get_logger('myapp.views.home')

logger.info('Home page accessed by %s', self.current_user.name)

tornado 并发编程系列(4)——日志配置

在Tornado中初始化项目

def main():
    # PARSE_COMMAND_LINE Time to set the root level of logging to info
    options.parse_command_line()

    global server

    init_logger()
    # # 新建logger
    setup_loggers(settings)
    #
    # # 原生 orm
    # connect(db=settings.mongo.ops.db, host=settings.mongo.ops.uri)å
    #
    # # mongo logger
    # monitoring.register(CommandLogger())
    #
    # # orm
    # get_connection()

    from src.api.application import Application

    global app
    app = Application()

    server = httpserver.HTTPServer(app, xheaders=True)
    server.listen(port=settings.service.server.port, address=settings.service.server.host)

    logger.info(f"port:{settings.service.server.port},address:{settings.service.server.host}")

    signal.signal(signal.SIGTERM, sig_handler)
    signal.signal(signal.SIGINT, sig_handler)

    # 配置文件更新
    PeriodicCallback(check_config_file_update, 5000).start()

    ioloop.IOLoop.instance().start()

总结

在本文中,我们讨论了如何使用Loguru配置Tornado的日志系统。我们注意到Loguru提供了易于使用的API和灵活的选项,可以帮助关键应用程序组件记录日志以正确、有效地工作。此外,我们演示了如何动态转发日志,同时可以将日志信息输出到不同的位置。

总之,Tornado是Python Web框架的一个流行选择,Loguru为可扩展、高度可配置的日志记录提供了一个强大的工具。我相信您熟练掌握这些工具后,您将能够为您的Tornado应用程序充分利用它们的功能,以提高程序可维护性和调试能力。