django logdb允许您将条目记录到数据库中并定期聚合它们。

django-logdb的Python项目详细描述


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 = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    ...
    'djangologdb',
)

在django urls.py 中,在管理员:

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())

要通过日志配置文件使用此处理程序,只需导入 处理程序 来自djangologdb的模块 从文件加载配置:

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 文件中设置以下设置:

< DL>
日志数据库历史记录天数

在各种图表中显示的天数。

默认值:

LOGDB_HISTORY_DAYS = 30
对数间隔

各种图中每个数据点之间的 时间增量

默认值:

LOGDB_INTERVAL = datetime.timedelta(1) # 1 day
日志数据库规则

定义在某些条件为真时创建新日志项的规则。

默认值:

easy_install django-logdb
0
日志数据库级别颜色

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

默认值:

easy_install django-logdb
1
日志数据库媒体根目录

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

默认值:

easy_install django-logdb
2
日志数据库媒体URL

设置处理从 logdb\u media\u根服务的媒体的url。制作 一定要在结尾加上一个斜杠。如果 settings.debug=true,则 Django将为媒体提供服务。

默认值:

easy_install django-logdb
3

命令

< DL>
聚合日志

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

< DL> 用法
python django admin.py 聚合日志
选项
< D> >表> < COL/> < COL/> <正文> -s --跳过操作 不要使用规则创建新日志。 --cleanup= 清除 指定保留日志项的天数 并删除其余部分。 <表>

FAQ

< DL>
图表不显示在Django管理员中。

如果您没有 设置。debug=true ,介质将不会被 詹戈您应该将媒体目录复制到您自己的媒体目录,然后 相应地设置logdb_media_root和logdb_media_url。

示例:

easy_install django-logdb
4

您也可以使用apache的alias指令来提供 静态文件,就像你对django自己的媒体文件所做的那样。它是 此处解释: http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/提供媒体文件 这可以归结为在virtualhost条目中添加以下行:

easy_install django-logdb
5

示例:

easy_install django-logdb
6
django logdb的django管理页面加载非常慢。
如果图中有很多数据点,它将执行许多查询。 这可能需要一些时间。你应该缩短时间或者增加 间隔。默认情况下,使用间隔为1天的最后30天, 产生30个数据点。 请参见设置 logdb_history_days logdb_interval
为什么每个数据点执行一个查询?
django还不允许按特定日期信息分组。偶数 虽然时间戳存储在数据库中,但无法告诉 Django orm按天、按小时等分组。我用的解决方法是 过滤/限制构造1个数据点所需的结果。
当我运行测试时,我看到 错误:djangologdb.middleware […]

当您运行例如testproject时,配置设置为 任何错误也会显示在sys.stderr上。如你所见, 测试都成功,但测试的异常仅显示在 控制台。这不是错误!

您可以通过禁用您的 测试配置(即删除处理程序)。

为什么模板要扩展django基模板的本地版本?
这样做是为了实现自定义模板的最佳灵活性。皮肤像 grappelli覆盖了很多模板,有时您希望能够 更改和使用django logdb中的基本模板并更改一些细节 在django logdb模板本身中,不复制所有基本模板 东西。< /dD>

测试项目

testproject是django logdb的示例安装。它提供了 django 1.1和django 1.2的设置文件,只需运行即可。

在testproject下面的目录中,创建一个虚拟环境:

easy_install django-logdb
7

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

< Buff行情> $bin/python bin/pip安装django $bin/python bin/django-admin.py runserver–settings=testproject.settings\u django\u 1

谢谢

对于那些帮助这个项目变得越来越好的人来说:

  • 梅西克·斯泽斯尼亚克(Vvarp)
  • 维克多范登埃尔岑

感谢david cramer在django db log上的工作 (http://github.com/dcramer/django-db-log/" rel="nofollow">http://github.com/dcramer/django-db-log/)此软件包所基于的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中ArrayList的超简单问题   Java 8在一段时间后过期   java如何创建具有用户定义维度的矩阵,并使用从上到下、从左到右的递增值填充它?   java从JDBC重启mysql   带有sqlite的java LiveData未更新UI   带有JDialog的java小程序在Mac OSX中未正确隐藏   java ActionListener无法从公共类引用数组?   java Apache Digester:NoSuchMethodException:没有这样的可访问方法   安卓中数据库中的java数据没有以正确的格式检索   java快速排序实现:使用random pivot时几乎排序   安卓 Java:高效的ArrayList过滤?   java如何在单独的文件中制作GUI程序   jasper报告如何从JSP或Java代码在JasperReport中传递参数值?