5

我已经在 Apache 上部署了我的 django 站点,但我的开发机器上没有出现问题,所以我想打印一些变量来看看发生了什么。

我尝试使用 python 日志记录模块,我在其中执行此操作:

import os, logging
FILE = os.getcwd()
logging.basicConfig(filename=os.path.join(FILE,'log.txt'),level=logging.DEBUG)  
logging.debug('Write')

在我的开发机器上,我的 django 项目的根目录中可能会显示一个 log.txt。但是,当我做同样的事情时,我的服务器上的相应目录中没有显示 log.txt 文件。

有谁知道如何调试它?谢谢!

4

3 回答 3

1

您假设当前工作目录是 Django 项目,但除非您在 wsgi 文件中专门更改它,否则情况不太可能发生。

但是,您不应该登录到单独的文件。默认的日志记录设置将记录到 Apache 自己的 /var/log 中的日志或该子目录中特定于站点的日志中。删除你的额外配置,让 Django 在那里登录。

于 2014-03-18T08:15:11.613 回答
0

好吧,这是我用于记录的一个小配置。您还应该检查您的文件权限 - 是否www-user允许写入目录?!

设置.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt': "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'django.utils.log.NullHandler',
        },
        'logfile': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': BASE_DIR + "/logfile",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        '': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    }
}

东西.py

import logging
try:  # Python 2.7+
    from logging import NullHandler
except ImportError:
    class NullHandler(logging.Handler):
        def emit(self, record):
            pass

log = logging.getLogger(__name__)
log.addHandler(NullHandler())

def demo(foo):
    if foo not bar:
        log.debug('doh!')
    return
于 2014-03-18T06:01:15.243 回答
-3

您需要完整的堆栈跟踪来调试 Web 应用程序的未知异常。通常您还想检查每个堆栈的上下文变量以找到根本原因。日志可以帮助你统计异常,但在生产服务器上调试效率很低。

Sentry 提供了一个非常好的 UI 来跟踪和调试 python 错误。它是开源的。它是 jacobian(Django Co-Creator)去年 Pycon 演讲中必备的 django 包之一。用它。

哨兵

哨兵街

于 2014-03-18T07:16:06.940 回答