跳转到主要内容

Django-logdb使您能够将条目记录到数据库,并定期汇总它们。

项目描述

DJANGO-LOGDB

Django-logdb使您能够将条目记录到数据库,根据某些规则对它们进行聚合和操作,并让您更深入了解正在发生的事情。

Django-logdb需要Django 1.1及以上版本。

描述

Django-logdb有一个自定义的日志处理程序,将日志条目写入数据库。因此,它可以很好地与您现有的日志配置集成,您可以决定哪些日志条目写入数据库。

Django管理站点扩展了最近日志条目的图形视图,以提供更多关于正在发生的事情的见解。日志消息按日志级别或“日志条目类型”分组。

为了最小化数据库访问,聚合是通过Django命令完成的,您可以定期调用该命令(例如,作为cron作业)。

安装

安装此包的最简单方法是使用setuptools

easy_install django-logdb

安装后,更新您的Django settings.py 文件,并将 djangologdb 添加到您的 INSTALLED_APPS

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    ...
    'djangologdb',
)

在您的Django urls.py 文件中,在admin之前包含 djangologdb.urls

urlpatterns = patterns('',
    ...
    (r'^admin/djangologdb/', include('djangologdb.urls')),
    ...
    (r'^admin/', include(admin.site.urls)),
)

可选的,如果您想记录异常,请添加中间件

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ...
    'djangologdb.middleware.LoggingMiddleware',
)

运行 python manage.py syncdb 创建数据库表。

设置日志

现在,对于实际的日志记录部分,您应使用数据库日志处理程序。有两种方法可以实现这一点:仅使用Python代码,或者使用配置文件。下面将解释这两种方法。

例如,要将此处理程序通过Python添加到根日志记录器中,您可以在Django的settings.py文件中添加以下内容:

import logging
from djangologdb.handler import DjangoDatabaseHandler, add_handler

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()

# A bug in Django causes the settings to load twice. Using
# this handler instead of logging.addHandler works around that.
add_handler(logger, DjangoDatabaseHandler())

要使用配置文件通过此处理程序,请先从djangologdbhandlers模块导入,然后在Django的settings.py文件中加载配置文件之前

from djangologdb import handlers
logging.config.fileConfig(...)

然后在您的日志配置文件中,您可以从处理程序命名空间添加它,并将其添加到任何您想要的日志记录器中

[handlers]
keys=djangologdb

[logger_root]
level=NOTSET
handlers=djangologdb

[handler_djangologdb]
class=handlers.DjangoDatabaseHandler
args=()

配置

您可以在Django的settings.py文件中设置以下设置

LOGDB_HISTORY_DAYS

显示在各个图形中的天数。

默认

LOGDB_HISTORY_DAYS = 30
LOGDB_INTERVAL

各个图形中每个数据点之间的时间间隔。

默认

LOGDB_INTERVAL = datetime.timedelta(1) # 1 day
LOGDB_RULES

定义规则,当某些条件为真时创建新的日志条目。

默认

LOGDB_RULES =
    [{
        # If 3 logs with level WARNING or higher occur in 5 minutes or
        # less, create a new log with level CRITICAL.
        'conditions': {
            'min_level': logging.WARNING,
            'qualname': '',
            'min_times_seen': 3,
            'within_time': datetime.timedelta(0, 5 * 60),
        },
        'actions': {
            'level': logging.CRITICAL,
        }
    }]
LOGDB_LEVEL_COLORS

为基于级别的数据集设置要在图中使用的颜色。

默认

LOGDB_LEVEL_COLORS =
    {
        logging.DEBUG: '#c2c7d1',
        logging.INFO: '#aad2e9',
        logging.WARNING: '#b9a6d7',
        logging.ERROR: '#deb7c1',
        logging.CRITICAL: '#e9a8ab',
    }
LOGDB_MEDIA_ROOT

设置绝对路径,指向django-logdb媒体目录。

默认

LOGDB_MEDIA_ROOT = os.path.join(djangologdb.__path__[0], 'media')
LOGDB_MEDIA_URL

设置处理从LOGDB_MEDIA_ROOT提供的媒体的URL。确保在末尾添加斜杠。如果settings.DEBUG=True,媒体将由Django提供。

默认

LOGDB_MEDIA_URL = '/admin/djangologdb/media/'

命令

aggregate_logs

聚合日志条目并触发任何匹配规则的行动。

用法:

python django-admin.py aggregate_logs

选项:
-s, --skip-actions

不使用规则创建新日志。

--cleanup=CLEANUP

指定保留日志条目的天数并删除其余条目。

常见问题解答

图形未在Django管理中显示。

如果您没有settings.DEBUG=True,则Django不会提供媒体。您应该将媒体目录复制到自己的媒体目录,并相应地设置LOGDB_MEDIA_ROOT和LOGDB_MEDIA_URL。

示例

LOGDB_MEDIA_ROOT = '/myproject/media/djanglogdb/'
LOGDB_MEDIA_URL = '/media/djanglogdb/'

除了复制之外,您还可以使用Apache的Alias指令提供静态文件,就像您可能也为Django自己的媒体文件所做的那样。这里解释如下:https://docs.django.ac.cn/en/dev/howto/deployment/modwsgi/#serving-media-files 这归结为将以下行添加到您的虚拟主机条目中

Alias <your LOGDB_MEDIA_URL setting> <path to django-logdb media dir>

示例

Alias /admin/djangologdb/media/ /myproject/eggs/django_logdb-0.9.5-py2.6.egg/djangologdb/media/
django-logdb的Django管理页面加载非常慢。

如果您图形中有许多数据点,它将执行许多查询。这可能需要一些时间。您应该减少时间范围或增加间隔。默认情况下,使用最后30天,间隔为1天,结果为30个数据点。请参阅设置LOGDB_HISTORY_DAYSLOGDB_INTERVAL

为什么每个数据点都会执行1个查询?

Django(目前)不允许按某些日期信息分组。尽管在数据库中存储了时间戳,但没有方法告诉Django ORM按日、按小时等分组。我使用的解决方案是过滤/限制构建一个数据点所需的结果。

当我运行我的测试时,我看到ERROR:djangologdb.middleware [...]

当您运行测试项目时,配置设置为将任何错误也显示在sys.stderr上。如您所见,所有测试都成功,但测试中测试的异常只是显示在控制台。这不是错误!

您可以通过禁用测试配置的日志记录到控制台来禁用此行为(例如,删除处理程序)。

为什么模板扩展Django基本模板的本地版本?

这是为了在自定义模板方面具有最佳灵活性。类似于Grappelli的皮肤会覆盖许多模板,有时您希望能够更改并使用django-logdb中的基本模板,同时在django-logdb模板本身中更改一些具体内容,而无需复制所有基本模板内容。

测试项目

testproject是django-logdb的一个示例安装。它提供了一个Django 1.1和Django 1.2的设置文件,仅用于运行。

在testproject以下目录中创建一个虚拟环境

$ virtualenv .
$ source bin/activate

安装Django并使用您Django版本的设置文件之一运行内部服务器。

$ bin/python bin/pip install django $ bin/python bin/django-admin.py runserver –settings=testproject.settings_django_1_1

感谢

感谢所有帮助使这个项目变得越来越好的人们

  • Maciek Szczesniak(vvarp)

  • Victor van den Elzen

感谢David Cramer在django-db-log(http://github.com/dcramer/django-db-log/)上的工作,本包基于此。

变更记录

1.0

  • 将jQuery更改为使用noConflict以更好地与其他框架兼容。

  • 添加了Django 1.1和Django 1.2的设置文件。

  • 添加了测试项目启动的简要说明。

0.9.11

  • 修复了一个问题,在单元测试运行之前,应用程序向表中添加日志条目,导致django-logdb的单元测试失败。

0.9.10

  • 修复了在具有现有日志配置的项目中使用django-logdb测试套件的问题。

  • 将testproject更新到Django 1.2。

  • 添加了许可文件(MIT)(抱歉Jacob)。

0.9.9

  • 在清单文件中添加了LogEntry模板。

  • 修复了当传递的消息不是字符串时发生的问题。

0.9.8

  • 使用int64兼容的字段来存储线程ID(vvarp)。

  • 修复了传递给日志记录参数的无效字符问题。

0.9.7

  • 日志聚合现在在事务中完成。

  • 修改模板以允许更容易的自定义。

  • 修复了在Python 2.5中发生的tests.py中的错误。

  • 添加了两个新设置:INTERVAL和HISTORY_DAYS,默认值与之前相同。

  • 将JS代码从extrastyle移动到模板中的extrahead块。

0.9.6

  • 更新了README以包括媒体服务示例。

  • 修复了将对象或实例作为日志记录参数保存时的问题(picklefield)。

  • 修复了参数中的Unicode字符问题。

  • 将库picklefield替换为JSONField和TupleField。

0.9.5

  • 删除了Django作为要求(尽管仍然是必需的),以防止与djangorecipe冲突。

0.9.4

  • 修复了清单以包括更改。

0.9.3

  • 添加了LogEntry视图模板。

  • 将模板重命名为Django的默认模板。您仍然可以覆盖它们。

0.9.2

  • 在PyPI上的首次发布。

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

django-logdb-1.1.tar.gz (65.8 kB 查看哈希值)

上传于 源代码

由以下支持