【发布时间】:2022-06-16 00:01:01
【问题描述】:
### Start 4 subprocesses ###
server = tornado.httpserver.HTTPServer(app)
server.bind(8000)
server.start(4) # 4 subprocesses
### Logger using TimeRotatingFileHandler within each app ###
timefilehandler = logging.handlers.TimedRotatingFileHandler(
filename=os.path.join(dirname, logname + '.log'),
when='MIDNIGHT',
interval=1,
encoding='utf-8'
)
将 tornado 与多个子进程和记录器一起使用会导致多个记录文件的下标如下(如果使用文件名作为记录名称):
service_0.log
service_1.log
service_2.log
service_3.log
是否可以让所有子进程写入到龙卷风中的一个地方?或者如果使用一些日志聚合工具来处理麻烦,因为逐个检查日志非常不方便,有什么想法吗?提前致谢。
【问题讨论】:
-
没有从多个进程记录到单个文件的标准方法。建议的解决方案是将日志条目发送到通过
QueueHandler写入文件的单个进程,或者设置一个服务器,该服务器从SocketHandler获取原始套接字连接或通过HTTPHandler获取http 请求。 docs.python.org/3/howto/logging-cookbook.html -
这不是您的情况的确切描述,但我认为这应该是一个很好的建议:"Deploying Web applications using Gunicorn and uWSGI"
-
@Aaron 谢谢,
QueueHandler是个好建议,我会调查的。我们没有在 wsgi 后面部署应用程序,因为我们可能需要提供一些异步功能 tornado。 -
为 Gunicorn 和 uWSGI 提供的建议可以应用于任何网络服务器。它只是解释了使用简单的套接字服务器来接受来自
SocketHandler的日志记录。
标签: python logging multiprocessing tornado