【问题标题】:Custom Error Reporting Capability in DjangoDjango 中的自定义错误报告功能
【发布时间】:2022-01-18 21:19:50
【问题描述】:

我已经在 settings.py 中设置了 ADMINS 变量。我已经配置了我的电子邮件,一切都按预期工作。当我遇到错误时,我会从我的生产框中收到一条非常详细的错误消息。我也了解 MANAGERS 变量以及它如何处理 404 错误和发送警报。好的... 但是,我有另一个用例,而我想将错误报告(标准 500 详细报告)发送给基于发生错误的应用程序的一组个人(或者如果在特定应用程序之外,则为默认值)。所以,假设我有 1 人开发/支持 webapp1 和 2 人支持 webapp2。如果错误发生在 webapp2 中,我只想发送给那些 2,如果在 webapp1 中,开发/支持该应用程序的人。如果特定应用程序中没有发生错误,我会发送给在 ADMINS 变量中定义的每个人。

首先,有没有比通过自定义错误过程更好的方法来解决这个用例? 和.. 其次,这是否可能在自定义错误能力范围内?

【问题讨论】:

    标签: django django-errors


    【解决方案1】:

    Django 使用Python's Standard Logging Module;可能应该含蓄地回答他们如何实现定制 记录行为。 Python 具有出色的日志记录 documentationcookbookshow-tos

    问。如何仅将特定于应用程序的日志发送给其维护者?

    下面的示例不会详细介绍 Loggers、LogRecords、Formatters、Handlers 或 Django 的日志记录行为。 LogRecords 被传播到它们的父目录。开发者 i.e __author__ 维护 __package__ 需要在settings.py 文件上写一个project_level 记录器。假设tutorial 是开发人员正在维护的包。

    .
    ├── manage.py
    ├── requirements.txt
    └── tutorial
        ├── asgi.py
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
    
    1 directory, 7 files
    

    为了简洁起见,专注于处理程序、django 的记录器和过滤器。

    ├── settings.py
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'filters': {
            """
            another alternate handler inside your package.
            Where custom behavior is implemented. key, value pair 
            dictionary is given. Option to pass extra parameter is the 
            handler class needs one. """ 
                                         
            
            |. # the logRecords will propapagte up
            |. #  to it's parent dirs. Your 
            |. # project root where you'll handle it.
            |...project/
            |... __init__.py
            |... logging.py
            |...    class NinjalFilter:
            |...        raise NotImplementedError
    
            
            'Ninja': {                                                                                  
                '()': 'project.logging.NinjalFilter',                                      
                'key': 'value',
            },
        },
        'handler': {
            'mail_admins': {
                'level': 'ERROR',  # 4XX (ERROR) or 5XX (Warning) Your Wish
                'class': 'django.utils.log.AdminEmailHandler',
                'filters': ['Ninja']
            },
        },
        'logger': { 
            """
            Django introduced loggers classes Not in the standard Library. 
            https://docs.djangoproject.com/en/4.0/ref/logging/#default-logging-configuration
            """
            'YouCustomLogger': {
                'handlers': ['mail_admins', 'NinjaProjectMaintainerAdmins'],
                'level': 'INFO', # Again 4XX (ERROR) or 5XX (Warning) Your Wish
                'filters': ['Ninja']
            }
        }
    }
    
    

    CustomNinjaLogger 似乎将您的特殊Ninja 过滤后的日志记录传递给处理程序main_admins 和自定义NinjaProjectMaintainerAdminsHandler。请注意,如果 builtin mail_admins 完成这项工作,您可能不需要自定义 handlerNinjaProjectMaintainerAdminHandler


    我正在开发一个开源异步记录器——它使记录更容易。我可以使用功能请求、建议。祝你有美好的一天。希望答案有所帮助。

    【讨论】:

    • 感谢您的反馈。您能否链接到您的记录器的信息页面?
    • 你的意思是开源项目吗?我正在收集规格建议。它甚至还没有处于 alpha 阶段。一旦准备好,我很乐意;如果您有更多疑问,请告诉我。
    • @Eric,我们需要反馈和测试人员。如果您有兴趣并且需要一个易于使用的 Django 记录器。当然,如果您使用该包,该项目将有文档和密切支持。它可以帮助我们俩。这是一个带有 MIT 许可证的开源工具。想一想。并给我发邮件
    • 我不确定我可以提交的级别,但我想帮助测试。目前,我有很多事情要做,但我会尽我所能做出贡献。 :)
    猜你喜欢
    • 2016-07-19
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2016-06-02
    • 2015-02-16
    相关资源
    最近更新 更多