18

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

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

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

4

5 回答 5

15

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

于 2012-08-09T16:30:15.483 回答
9

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

代码改编自标准 Python RotatingFileHandler:

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

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

于 2015-02-25T13:36:52.520 回答
5

检查 django-db-logger

整合不到一分钟

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

于 2018-06-03T08:03:31.897 回答
1

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

于 2014-10-01T18:55:50.443 回答
0

您可以查看我在此处发布的一个很好的解决方案。您只需要一个字符串连接即可连接到您的数据库。例如,如果您使用 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”指向处理程序类。

于 2021-04-28T18:38:19.947 回答