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

时间:2012-08-09 16:26:03

标签: django logging

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

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

理想情况下,我希望能够存储有关日志消息的元数据(如远程IP地址,用户代理,wsgi进程ID等),然后根据它进行过滤/浏览(即显示)我在过去24小时内从此IP地址发送所有日志消息)。有没有人这样做过?

5 个答案:

答案 0 :(得分:14)

只需使用Sentry即可。 Raven,Django功能部分挂钩到日志框架中,因此除了从应用程序收集错误外,还应显示任何自定义日志消息。

答案 1 :(得分:6)

除了Sentry的明显选择之外,为了锻炼,有一篇很好的博客文章标题为" Creating custom log handler that logs to database models in django"在" James Lin博客"中,它简要介绍了如何使用第二个数据库,以及代码示例。

代码改编自标准Python RotatingFileHandler:

  

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

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

答案 2 :(得分:1)

检查django-db-logger

整合

需要不到一分钟的时间

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

答案 3 :(得分:0)

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

答案 4 :(得分: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' 指向处理程序类。