Python Tornado:记录信息

法鲁斯

我在TornadoAPI ( 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)(for n != 1) 并使用进程管理器supervisord来启动所需数量的进程。然后,您可以为每个进程提供自己的日志文件,并避免因从一个父进程分叉所有内容而带来的复杂性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Tornado-禁用记录到stderr

来自分类Dev

Python Tornado-禁用记录到stderr

来自分类Dev

正确记录协程Python3 + Tornado4.3 +本机日志记录模块中的异常记录

来自分类Dev

Python熊猫记录来自Yahoo Finance的股息信息

来自分类Dev

如何将调试级别记录到文件,但仅在python屏幕上记录信息级别

来自分类Dev

Python Tornado文件下载

来自分类Dev

Python 3 Tornado 网站

来自分类Dev

异步python记录AbstractEventLoop.slow_callback_duration的详细信息

来自分类Dev

Python 日志记录,如何将信息分别写入 2 个

来自分类Dev

Tornado Python作为守护程序

来自分类Dev

Python Tornado:缺少WSGI模块?

来自分类Dev

Python Tornado渲染静态目录

来自分类Dev

Python Tornado:如何使这个异步?

来自分类Dev

Python Tornado SSL websocket 连接

来自分类Dev

线程信息记录

来自分类Dev

从python访问WMI信息

来自分类Dev

存储输入的信息-Python

来自分类Dev

Python NBA统计信息

来自分类Dev

需要的Python代码信息

来自分类Dev

Python 对象共享信息

来自分类Dev

Python Tornado更新请求之间的共享数据

来自分类Dev

在Tornado Python中从RequestHandler访问URL

来自分类Dev

Python Tornado gen.engine异常处理

来自分类Dev

登录异步Tornado(python)服务器

来自分类Dev

APScheduler在Tornado Python中运行异步功能

来自分类Dev

Python / Tornado类包装器缓存问题

来自分类Dev

在Heroku上的python-tornado chatdemo

来自分类Dev

python tornado periodCallback 在特定时间

来自分类Dev

用于 websockets 的 Python Tornado 提取处理程序