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 服务器上部署时不起作用的主要内容,如果未能解决你的问题,请参考以下文章