【问题标题】:Where is the logging in my Django application started by uwsgi?由 uwsgi 启动的 Django 应用程序中的日志记录在哪里?
【发布时间】:2022-01-14 05:51:17
【问题描述】:

我使用supervisoruwsgi 来启动我的Django。这是主管中的conf

[program:myapp]
directory=/home/users
command=uwsgi --ini uwsgi.ini
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=30
stderr_logfile=/var/log/supervisor/supervisor.log
stdout_logfile=/var/log/supervisor/supervisor.log

这是uwsgiini文件

[uwsgi]
http-socket=0.0.0.0:8080
wsgi-file=myapp/wsgi.py
logformat=%(ltime) "%(method) %(uri) %(proto)" status=%(status) res-time=%(msecs)ms
logto=/var/log/supervisor/uwsgi.log

这样只列出方法、状态和响应时间等如下

14/Jan/2022:13:19:46 +0800 "GET /model/task/?taskid=e69a757974f811ec93e1f58ac6e34980&current=1&pageSize=10000&total=0&model_id=1 HTTP/1.1" status=200 res-time=107ms
14/Jan/2022:13:19:45 +0800 "POST /model/runmodel/ HTTP/1.1" status=200 res-time=3508ms

我想要的是,如果我在我的应用程序中添加logging.infologging.debug,它也可以写入日志文件。从doc of uwsgi 看来,我无法通过logformat 参数来实现这一点。有谁知道有没有可能?

【问题讨论】:

    标签: python python-3.x django logging uwsgi


    【解决方案1】:

    美好的一天!

    你说得对,logformat 只处理 uwsgi 的日志记录。

    如果你想让你的 Django 应用记录事件,你需要添加 2 件事:

    1. 更新settings.py:
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        "formatters": {
            "verbose": {
                "format": "[{asctime}] {levelname}: {name}.{message}",
                "style": "{",
            },
        },
    
        'handlers': {
             "console": {'level': 'DEBUG', "class": "logging.StreamHandler", "formatter": "verbose"},
        },
        "root": {
            "handlers": ["console"],
            "level": "DEBUG",
        },
    }
    
    1. 并将以下 3 行代码添加到您要登录的位置,如下所示:
    from django.views.generic import TemplateView
    from logging import getLogger # This 
    
    
    logger = getLogger(__name__) # This
    
    # Create your views here.
    class IndexView(TemplateView):
        template_name = "index.html"
    
        def get(self, request, *args, **kwargs):
            logger.info("Index page requested") # And this
            return super().get(request, *args, **kwargs)
    

    这将呈现以下内容:

    [2022-01-14 07:09:39,874] INFO: logged.views.Index page requested
    14/Jan/2022:07:09:39 +0000 "GET / HTTP/1.1" status=200 res-time=18ms
    

    Django 文档:https://docs.djangoproject.com/en/4.0/topics/logging

    查看源码:https://github.com/almazkun/uwsgi_logging

    【讨论】:

    • 您好,您提到的两个步骤我都试过了。仍然看不到supervisorctl tail -f myapplicationcat uwsgi.log 提到的日志
    • 这很有趣。 tail /var/log/supervisor/* 的输出是什么?我的示例应用程序将日志写入/var/log/supervisor/uwsgi.log
    • 最后,我可以通过同时添加--logto--daemonizeuwsgi-docs.readthedocs.io/en/latest/Logging.html来将日志添加到日志文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2023-03-13
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多