将 Django 日志消息存储在数据库中?

问题描述 投票:0回答:5

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

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

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

django logging
5个回答
14
投票

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


10
投票

除了明显选择 Sentry 之外,出于练习目的,“James Lin 博客”中还有一篇不错的博客文章,标题为“Creating custom log handler thatlogging to database models in django”,其中简要介绍了如何使用第二个数据库和代码示例来执行此操作。

代码改编自标准Python RotatingFileHandler:

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

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


7
投票

检查 django-db-logger

集成时间不到一分钟

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


1
投票

尝试django-request。我已经尝试过了,它基本上只是将请求日志放在一个名为 requests 的表中。它还包括重要信息,例如登录用户。


0
投票

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

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

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

然后您可以使用PhpMyAdmin作为“MySQL Web管理工具”通过Web浏览器查看数据库或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”指向处理程序类。

© www.soinside.com 2019 - 2024. All rights reserved.