Skip to main content

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

项目描述

DJANGO-LOGDB

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

Django-logdb 需要 Django 1.1 及更高版本。

描述

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

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

为了最大限度地减少数据库访问,聚合是通过您可以定期调用的 Django 命令完成的(作为 cronjob)。

安装

安装软件包的最简单方法是通过 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中,在管理员之前包含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())

要通过日志配置文件使用此处理程序,只需 在 Django settings.py中从djangologdb导入处理程序模块,然后从文件加载配置:

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

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

[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/'

命令

聚合日志

聚合日志条目并触发具有匹配规则的任何操作。

用法

python django-admin.py聚合日志

选项
-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 自己的媒体文件所做的那样。它在这里解释:http: //docs.djangoproject.com/en/dev/howto/deployment/modwsgi/#serving-media-files 这归结为将以下行添加到您的 VirtualHost 条目:

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 管理页面加载速度很慢。

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

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

Django(还)不允许按某些日期信息分组。即使时间戳存储在数据库中,也无法告诉 Django ORM 按天、按小时等进行分组。我使用的解决方案是过滤/限制构造 1 个数据点所需的结果。

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

例如,当您运行 testproject 时,会设置配置,以便任何错误也会显示在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)

  • 维克多·范登埃尔岑

感谢 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 中的错误。

  • 添加了 2 个新设置: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 查看哈希)

已上传 source