【问题标题】:Store Django Log messages in a database?将 Django Log 消息存储在数据库中?
【发布时间】:2012-08-06 22:31:09
【问题描述】:

Django(python web 框架)使用 python 的日志系统来存储日志。

有没有一种简单的方法可以将日志消息存储在数据库中,然后允许管理员用户通过网络查看它们?这是我可以自己写的东西,但没有必要重新发明轮子。我不想记录异常,但我已添加到代码中的 info/debug/notice 类型的消息。

理想情况下,我希望能够在完成后存储有关日志消息的元数据(如远程 IP 地址、用户代理、wsgi 进程 ID 等),然后基于此过滤/浏览(即显示我在过去 24 小时内来自此 IP 地址的所有日志消息)。有人做过吗?

【问题讨论】:

    标签: django logging


    【解决方案1】:

    只需使用SentryRaven,Django 的功能部分与日志框架挂钩,因此除了从您的应用收集错误之外,还应显示任何自定义日志消息。

    【讨论】:

    • 尽管我喜欢哨兵等,但它并没有回答这个问题。我对数据库记录器处理程序感兴趣。有人吗?
    • 我一直在寻找同样的东西,但我发现 Sentry 并不能完全取代日志记录。请参阅sentry.io/vs/logging“Sentry 不保证允许您找到准确的历史错误。因此,在您确实需要能够跟踪事件的情况下,您必须在现有的日志记录基础设施中维护它们。”
    【解决方案2】:

    尝试 django-requests。我已经尝试过了,它基本上只是将请求日志放在一个名为 requests 的表中。

    【讨论】:

    【解决方案3】:

    除了显而易见的选择 Sentry 之外,为了练习,在“James Lin 博客”中有一篇名为“Creating custom log handler that logs to database models in django”的不错的博客文章,其中简要说明了如何使用第二个数据库来做到这一点,其中代码示例。

    代码改编自标准Python RotatingFileHandler:

    ...RotatingFileHandler 允许您指定要写入和旋转文件的文件,因此我的 DBHandler 还应该允许您指定要插入的模型并在设置中指定到期时间,最重要的是,在独立应用程序上.

    这也可以很容易地适应使用单个数据库。

    【讨论】:

    • 附言。故意不包括代码本身,让我知道是否需要这样做。
    【解决方案4】:

    检查 django-db-logger

    整合不到一分钟

    https://github.com/CiCiUi/django-db-logger

    【讨论】:

    • 这是惊人的极简主义
    【解决方案5】:

    您可以查看我在here 发布的一个好的解决方案。您只需要一个字符串连接即可连接到您的数据库。例如,如果您使用 MySQL,则连接字符串应为:

    # mysqlclient
    'mysql+mysqldb://username:password@host:port/database'
    

    # PyMySQL
    'mysql+pymysql://username:password@host:port/database')
    

    然后您可以使用PhpMyAdmin 作为“MySQL 网络管理工具”通过网络浏览器查看数据库或使用DataGrip(我的偏好)远程访问任何数据库。


    要在 Django 中使用处理程序,您只需将处理程序类添加到 setting.py 的 LOGGING 变量中,如下所示:

    level = 'INFO' if DEBUG else 'WARNING'  # I prefer INFO in debugging mode and WARNING in production
    handler = ['log_db_handler', ]  # In production I rarely check the server to see console logs
    if DEBUG:
        handler.append('console')
    
    LOGGING = {'version': 1,
               'disable_existing_loggers': False,
    
               'formatters': {'verbose': {'format': '{levelname} {message}',  # {asctime} {module} {process:d} {thread:d}
                                          'style': '{', }, },
    
               'handlers': {'log_db_handler': {'level': level,
                                               'class': 'db_logger.handlers.DBHandler',
                                               'formatter': 'verbose', },
                            'console': {'class': 'logging.StreamHandler', }},
    
               'loggers': {'db_log': {'handlers': handler,
                                      'level': level,
                                      'propagate': False, },
                           'django': {'handlers': handler,
                                      'level': level,
                                      'propagate': True, },
                           'django.request': {'handlers': handler,
                                              'level': level,
                                              'propagate': True, }}}
    

    注意 'db_logger.handlers.DBHandler' 指向处理程序类。

    【讨论】:

      猜你喜欢
      • 2018-09-30
      • 2021-01-19
      • 2017-11-02
      • 2019-01-22
      • 1970-01-01
      • 2011-04-15
      • 2011-12-05
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多