Django(python web框架)使用python的日志系统来存储日志。
是否有一种简单的方法可以将日志消息存储在数据库中,然后允许管理员用户通过Web查看它们?这是我自己写的那种东西,但没有必要重新发明轮子。我不想记录异常,但是我已经添加到代码中的info / debug / notice类型消息。
理想情况下,我希望能够存储有关日志消息的元数据(如远程IP地址,用户代理,wsgi进程ID等),然后根据它进行过滤/浏览(即显示)我在过去24小时内从此IP地址发送所有日志消息)。有没有人这样做过?
答案 0 :(得分:14)
答案 1 :(得分:6)
除了Sentry的明显选择之外,为了锻炼,有一篇很好的博客文章标题为" Creating custom log handler that logs to database models in django"在" James Lin博客"中,它简要介绍了如何使用第二个数据库,以及代码示例。
代码改编自标准Python RotatingFileHandler:
... RotatingFileHandler允许您指定要写入和旋转文件的文件,因此我的DBHandler还应该允许您指定要插入的模型并在设置中指定过期,最重要的是,在独立应用程序上
这也可以很容易地适用于使用单个数据库。
答案 2 :(得分:1)
答案 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' 指向处理程序类。