gpt4 book ai didi

Python Tornado : logging infos

转载 作者:行者123 更新时间:2023-12-01 09:34:09 26 4
gpt4 key购买 nike

我在 Tornado API (Python) 中写入日志时遇到问题。

我的应用程序将日志写入文件“api.log”。始终在 0 点(使用logging.handlers.TimedRotatingFileHandler 类)轮换文件。这样,当前文件将被命名为“api.log.yyyy-mm-dd”,并创建一个新的“api.log”。然后,应用程序继续写入这个新文件。但是,某些线程仍在最旧的文件 (api.log.yyyy-mm-dd) 上写入,而其他线程则在新的 “api.log” 中写入。我总是需要重新启动应用程序才能解决问题。下面是我的代码片段。

import logging
import logging.config
import tornado.ioloop
from tornado_json.application import Application
from tornado.httpserver import HTTPServer

import tornado.ioloop
from tornado_json.application import Application
from tornado.httpserver import HTTPServer
from tornado_json.requesthandlers import APIHandler


class HelloWorldHandler(APIHandler):
def get(self):
logging.getLogger('api').info('hello world!')
return "Hello world!"


logging.config.dictConfig({
'version': 1,
'formatters': {
'default': {
'format': '%(asctime)s %(levelname)s %(message)s'
},
},
'loggers': {
'api': {
'level': 'NOTSET',
'handlers': ['api_handler'],
}
},
'handlers': {
'api_handler': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'when': 'midnight',
'backupCount': 1,
'formatter': 'default',
'filename': 'api.log'
},
}
})

app = Application(routes=[('/api/helloworld', HelloWorldHandler)], settings={})

server = HTTPServer(app, xheaders=True)

server.bind(8888)
server.start(150)

tornado.ioloop.IOLoop.instance().start()

问题是:为什么日志轮换在某些线程上不起作用?

最佳答案

server.start(150) 启动 150 个进程,而不是线程。 (这是很多。使用比 CPU 多得多的进程是不寻常的)。进程不共享内存,因此每个进程都独立决定何时轮换其日志。

当您创建这样的多个进程时,日志记录通常很有趣。我建议避免使用 server.start(N) (对于 n != 1),并使用像 supervisord 这样的进程管理器来启动所需数量的流程。然后,您可以为每个进程提供自己的日志文件,并避免因从一个父进程派生所有内容而产生的复杂情况。

关于Python Tornado : logging infos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com