python - Tornado websocket 日志记录

标签 python logging tornado

我正在尝试使用 Tornado Web 服务器实现 Websocket。

我的设置如下:

from tornado.options import options, define, parse_command_line
import django.core.handlers.wsgi
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.wsgi

from pogows.tornado_sockets import GetSocketHandler, UpdateSocketHandler
from mobile.cleaner import start_cleaning

define('port', type=int, default=8080)
tornado.options.options['log_file_prefix'].set('/var/www/pogo_django/logs/tornado_server.log')
tornado.options.parse_command_line()

<snip>

def main():

    logger = logging.getLogger(__name__)
    wsgi_app = tornado.wsgi.WSGIContainer(
        django.core.handlers.wsgi.WSGIHandler())
    tornado_app = tornado.web.Application(
        [
            ('/hello-tornado', HelloHandler),
            ('/socket/get', GetSocketHandler),
            ('/socket/update', UpdateSocketHandler),
            ('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
        ], debug=True)
    logger.info("Tornado POGO server starting...")
    server = tornado.httpserver.HTTPServer(tornado_app)
    server.listen(options.port)
    start_cleaning()
    tornado.ioloop.IOLoop.instance().start()

到目前为止,一切看起来都很好, Tornado 日志,我看到了信息消息。 现在,我正在尝试从 websocket 处理程序类记录一些内容。

class GetSocketHandler(tornado.websocket.WebSocketHandler):

    def open(self):
        print "opening"

    def on_closed(self):
        print "closing"

    def on_message(self, message):
        last_update=datetime.datetime.utcnow().replace(tzinfo=utc)
        try:
            print "getting_user"
    ...

Tornado 受 supervisord 管辖,具有以下配置:

[program:pogo_tornado] command=/var/www/pogo_django/tornado_server.py user=www-data stdout_logfile=/var/www/pogo_django/logs/pogo_stdout.log stderr_logfile=/var/www/pogo_django/logs/pogo_stderr.log environment=PYTHONPATH="/var/www/pogo_django/",DJANGO_SETTINGS_MODULE="pogo.settings"

我尝试了一些事情。

  1. 只需使用 print 语句,如上面的代码片段所示,希望supervisord 捕获它并将其发送到 stdout/stderr 日志。
  2. 在 websocket 类中创建一个单独的 logging.getLogger() 实例并使用它。

这些都不会产生预期的结果。

当我从命令行手动运行tornado时,我确实看到打印到控制台的print版本,但logging无论如何都不起作用。

我哪里出错了?

最佳答案

呸,我明白了。我使用 getLogger() 时没有设置日志记录级别,只是盲目地记录到 DEBUG

显式使用logger.setLevel(logging.DEBUG)向我显示日志中的消息。

显然 Tornado 默认设置了其他级别..愚蠢的我。

关于python - Tornado websocket 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877090/

相关文章:

python - 如果发现重复项,则取列表中值的平均值

Java FileHandler 和滚动日志文件

python - 使用Python/Tornado的音频流充当 "radio"

python - 如何将 GCS 中的多个分区 parquet 文件加载到 pandas 数据框中?

在 if 语句中使用 "not in"时出现 Python 错误?

logging - Spring Boot 关闭包的日志记录

Python oauth2client 异步

python - 带有 Tornado 的 JSONp 请求

python - 在python中获取文件的绝对路径

java - Logback 占位符不适用于测试