Django Logging 在 Ubuntu/Apache 服务器上部署时不起作用

Posted

技术标签:

【中文标题】Django Logging 在 Ubuntu/Apache 服务器上部署时不起作用【英文标题】:Django Logging not working when deployed on Ubuntu/Apache Server 【发布时间】:2015-02-08 04:45:43 【问题描述】:

我的 Django Logger 在我的本地机器上运行良好,但在我将它部署到服务器时无法运行。

本地:OS X 10.9.5、Python 2.7.5、Django 1.6.2 服务器:Ubuntu 12.04、Apache 2.2.22、mod_wsgi 版本:3.3-4ubuntu0.1、​​Python 2.7.3、Django 1.6

在我的本地设置中,我运行python manage.py syncdb,这会创建survey.log 文件,然后我会使用tail -f survey.log,这样我就可以在创建错误消息时看到它们。

在我的服务器上运行python manage.py syncdb,这会创建survey.log 文件,然后我会使用tail -f survey.log。但是我看不到任何调试消息,当我使用nano 检查文件时,它是空的。

为什么在我的生产环境中没有记录数据记录到survey.log?我错过了什么?

views.py

import logging
logger = logging.getLogger(__name__)


logger.debug('This is your images list in 7: %s', images)

settings.py

LOGGING = 
    'version': 1,
    'disable_existing_loggers': False,
    'filters': 
        'require_debug_false': 
            '()': 'django.utils.log.RequireDebugFalse'
        
    ,
    'handlers': 
        'mail_admins': 
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        ,
        'applogfile': 
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            #'filename': os.path.join(DJANGO_ROOT, 'survey.log'),
            'filename': 'survey.log',

            'maxBytes': 1024*1024*15, # 15MB
            'backupCount': 10,
        
    ,
    'loggers': 
        'django.request': 
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        ,
        'survey': 
            'handlers': ['applogfile',],
            'level': 'DEBUG',
        ,
    


编辑

我现在发现我的 Django 错误日志正在写入我的 Apache 错误日志。这正常吗?

跑步

sudo tail /var/log/apache2/error.log

为我提供了我应该在上面的 Django 错误日志文件中得到的预期打印输出。例如

[15/Dec/2014 21:36:07] DEBUG [survey:190] This is your images list in 7: ['P3D3.jpg', 'P1D1.jpg', 'P5D5.jpg']

【问题讨论】:

【参考方案1】:

您没有在您的views.py 中使用正确的记录器。试试这个:

import logging
logger = logging.getLogger('survey')
logger.debug('This is a debug message.')

您获取的记录器必须与LOGGING 中定义的记录器匹配。

【讨论】:

现在说得通了。不幸的是,它一定不是唯一的问题,因为它仍然无法正常工作。还有其他建议吗?谢谢 正如 slafs 所说,尝试为您的日志文件使用绝对路径。您注释掉的代码行应该可以工作os.path.join(DJANGO_ROOT, 'survey.log') 谢谢,我还必须在我的survey.log 文件上设置写权限才能让它最终工作【参考方案2】:

我的猜测是,日志文件实际上是在一个目录中创建的,但它是在一个你不知道的目录中。尝试在您的配置中添加完整路径。 'filename': '/tmp/survey.log', 之类的东西,重启 apache 并检查它是否存在。当然,首先您必须应用 Derek 发布的解决方案。

您在 apache 日志中看到日志消息的原因可能是因为 mod_wsgi 以某种方式配置了默认 (root) 记录器,而您的配置没有禁用它(您有 'disable_existing_loggers': False,)。

【讨论】:

【参考方案3】:

如果你不传递文件名的完整路径,它是在运行进程启动的目录中创建的(或制作一个sys/chdir),这取决于操作系统使用哪个目录

【讨论】:

以上是关于Django Logging 在 Ubuntu/Apache 服务器上部署时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在Django中使用logging模块

Django框架----logging配置

Django logging配置

Django logging配置

Django中的logging

Django logging配置