Django(Python Web 框架)使用 Python 的日志系统来存储日志。
有没有一种简单的方法可以将日志消息存储在数据库中,然后允许管理员用户通过网络查看它们?这是我自己可以写的东西,但没有必要重新发明轮子。我不想记录异常,而是记录我添加到代码中的信息/调试/通知类型消息。
理想情况下,我希望能够存储有关日志消息的元数据(例如远程 IP 地址、用户代理、wsgi 进程 ID 等),然后基于该元数据进行过滤/浏览(即显示所有内容)记录过去 24 小时内来自该 IP 地址的消息)。有人做过吗?
除了明显选择 Sentry 之外,出于练习目的,“James Lin 博客”中还有一篇不错的博客文章,标题为“Creating custom log handler thatlogging to database models in django”,其中简要介绍了如何使用第二个数据库和代码示例来执行此操作。
代码改编自标准Python RotatingFileHandler:
...RotatingFileHandler 允许您指定要写入的文件和旋转文件,因此我的 DBHandler 还应该允许您指定要插入的模型并在设置中指定到期时间,最重要的是,在独立应用程序上。
这也可以很容易地适应使用单个数据库。
尝试django-request。我已经尝试过了,它基本上只是将请求日志放在一个名为 requests 的表中。它还包括重要信息,例如登录用户。
您可以查看我在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”指向处理程序类。