tornado 并发编程系列(4)——日志配置
使用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中初始化项目
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应用程序充分利用它们的功能,以提高程序可维护性和调试能力。
转载自:https://juejin.cn/post/7232596270552662071