【问题标题】:Triggering python logger in Django project在 Django 项目中触发 python 记录器
【发布时间】:2016-04-04 12:33:12
【问题描述】:

我有一个 Django 项目,它具有以下功能,我想在其中触发记录器:

def remove_email_from_list(list_id, email_address):
    subscriber_hash = hashlib.md5(email_clean)
    url = '%s/lists/%s/members/%s' % (settings.API_URL, list_id, subscriber_hash.hexdigest())
    r = requests.delete(url, auth=HTTPBasicAuth('user', settings.API_KEY),)
    if r.status_code != 204:
        logging.critical("Executed mailchimp api call, wrong status code. Message body = " + r.text)
    return r

但是,我尝试了所有这些记录器来捕获此错误并发送电子邮件,但不知何故记录器没有被触发。你们知道我做错了什么吗?

'loggers': {
    'django': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True
    },
    'django.request': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True
    },
    'project_name.logging': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },
    'django.logging': {
        'handlers': ['mail_admins'],
        'level': 'ERROR',
        'propagate': True,
    },

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    我认为如果您直接调用logging.critical,这是通过默认记录器完成的。 首先使用(在您的 py 文件头部的某个位置)创建一个命名记录器:

    logger = logging.getLogger(__name__)
    

    然后调用

    logger.critical(...)
    

    这应该使用带有你所在文件的包名的记录器

    Logger Objects Documentation

    【讨论】:

    • 嗯,我仍然无法配置它。此文件 (helper_functions.py) 位于我的应用程序“邮件”的根目录中。如果我将我的记录器定义为“api_logger”,我应该将记录器与“mail.api_logger”一起使用吗?那仍然无法捕获我的日志。
    • 不,不,不要用任何自定义替换“name”。 'name' 会自动替换为模块的虚线路径。如果您将 'name' 替换为 'api_logger',您可能必须在记录器配置中使用相同的名称。
    • 对不起,我不是故意粗鲁并使用双重“不”。我实际上是想写“不,不要”,双下划线也被格式删除了,对此感到抱歉。应该是__name__
    猜你喜欢
    • 2012-04-11
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2011-10-22
    相关资源
    最近更新 更多