`

django日志logging 的配置以及处理

 
阅读更多

日志在程序开发中是少不了的,通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用处。在java 开发中通常用 log4j,logback 等三方组件。那么在 django中是怎么处理日志的呢。django 利用的就是python 提供的 logging模块. 在前面有一篇文章专门讲过 python的 logging(看这里) ,但django中要用logging ,还得有一定的配置规律,需要在setting 中配置:

程序代码 程序代码

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(levelname)s]- %(message)s'
        },
    },
    'filters': {
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        },
        'default': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','all.log'), #或者直接写路径:'c:\logs\all.log',
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
        'console':{
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'request_handler': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','script.log'), #或者直接写路径:'filename':'c:\logs\request.log''  
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
        'scprits_handler': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(STATIC_ROOT+'/logs/','script.log'), #或者直接写路径:'filename':'c:\logs\script.log'
            'maxBytes': 1024*1024*5, # 5 MB
            'backupCount': 5,
            'formatter':'standard',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['default','console'],
            'level': 'DEBUG',
            'propagate': False
        },
        'XieYin.app':{
            'handlers': ['default','console'],
            'level': 'DEBUG',
            'propagate': True         
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'DEBUG',
            'propagate': False
        },
        'scripts': { # 脚本专用日志
            'handlers': ['scprits_handler'],
            'level': 'INFO',
            'propagate': False
        },
    }
}          


下面专门讲解一下: 其实这个配置与python 传统的logging 很类似.
formatters 用来配置 日志打印的格式
handlers ,用来定义具体处理日志的方式,可以定义很多种,"default" 就是默认方式,"console" 就是打印到控制台方式.
loggers 是用来配置用哪几种 handlers 来处理日志,比如你同时需要输出日志到文件,和到控制台,那就必须配置  两种handlers. 在上面的例子中 'XieYin.app" 是典型的例子.

有一点必须注意的是 loggers 类型 为"django" 这将处理所有类型的日志.
另外 为什么我配置了一个  'XieYin.app' 的logger,这是因为 django 会根据包的层次结构去找 应该用那个 logger 来处理日志,如果找不到,就不输出日志,而我的项目要输出日志的views.py 都是是放在 XieYin.app  下面的。而且当系统查找是否配置有相应的logger的时候,如果本身这个module 没有logger ,就查找父类是否有logger。比如有一个module:XieYin.app.comment.views.  如果在这里面用如下方式写日志:
views.py 中

程序代码 程序代码

import logging
logger = logging.getLogger('XieYin.app')
logger.info('aaa')
logger.error('error occurs')


这个时候也会找到 XieYin.app 去处理,虽然没有定义 "XieYin.app.comment.views" 这样的logger,它会再他的父类找。

知道了原理,在view中就如同上面介绍的那样,应用就好了

程序代码 程序代码

import logging
logger = logging.getLogger(__name__) # 这里用__name__通用,自动检测.
logger.info('aaa')
logger.error('error')



你如果既想看 自己在程序中输出的日志,又想看django自己输出的日志,特别是sql 语句,那么根据上面介绍的,你可以这样做:

程序代码 程序代码

import logging
logger = logging.getLogger('django') # 这里用__name__通用,自动检测.
logger.info('aaa')
logger.error('error')


这样,所有的日志你都能看到,包括 django.db.backends 数据库sql语句的日志 


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
分享到:
评论

相关推荐

    PyPI 官网下载 | django-logging-json-1.5.3.tar.gz

    在这个例子中,我们无法看到具体的目录结构,但我们可以推测它应该包含Django logging配置的JSON相关模块,以及可能的示例、许可证文件和安装指南等。 综上所述,"django-logging-json"是一个专门为Django框架设计...

    PyPI 官网下载 | django-logging-endpoint-1.0.2.tar.gz

    Django的日志配置基于Python的`logging`模块,允许开发者定义多个日志处理器和过滤器,以控制日志的输出方式和级别。然而,这些日志通常被打印到控制台或写入文件,对于大型分布式系统,这样的处理方式可能不够理想...

    django日志自动写入mysql插件

    下载后通过pip安装,在django项目settings的installed app中注册,在logging中class设置为handlers.handlers.DatabaseHandler,配置数据库host、user、password、db即可。django日志即自动写入配置的数据库中。

    Django日志模块logging的配置详解

    在Python的Web开发框架Django中,日志模块logging是一个非常重要的工具,它允许开发者记录应用程序的运行状态,包括错误信息、警告以及调试信息。在Java开发中,我们经常使用log4j或logback这样的第三方日志库,而在...

    Django 使用logging打印日志的实例

    对于更详细的Django日志系统使用方法,可以查阅官方文档:https://docs.djangoproject.com/en/1.11/topics/logging/。这份文档提供了更多关于配置、过滤器、处理器和自定义日志行为的信息。 总结来说,Django的`...

    Django logging配置及使用详解

    做开发离不开必定离不开日志, 以下是我在工作中写Django项目常用的logging配置. # 日志配置 BASE_LOG_DIR = os.path.join(BASE_DIR, log) LOGGING = { 'version': 1, # 保留字 'disable_existing_loggers': False...

    Python库 | django_splunk_logging-1.1.0.tar.gz

    然后,在Django项目的设置文件中,你可以配置`django_splunk_logging`作为日志处理器。配置时,你需要提供Splunk的主机地址、端口、认证信息(如果需要)以及日志级别等参数。一旦设置完成,Django的日志就会被自动...

    django-request-logging:记录HTTP请求正文的Django中间件

    将django-request-logging插入您的Django项目,您将获得直观且彩色编码的请求/响应有效负载日志记录,用于Web请求和API请求。 支持Django 1.8+。 正在安装 $ pip install django-request-logging 然后将request_...

    python的基于django的记录日志系统

    Django提供了一个logging模块,我们可以配置它来记录应用的事件。在这个项目中,我们可能会创建自定义的日志处理器和记录器,以便在数据库中存储日志信息。 6. **模板系统**: Django的模板语言允许我们创建动态...

    Django 日志配置按日期滚动的方法

    Django的日志配置是通过`settings.py`文件中的`LOGGING`变量来实现的。具体配置如下: ##### 4.1 日志格式化器 定义日志的格式,这里使用了一个详细的格式化器`verbose`,包含时间戳和日志级别。 ```python '...

    Python Django框架实现应用添加logging日志操作示例

    Django框架默认使用Python的内置`logging`模块来处理应用程序的日志记录需求。为了使Django应用能够有效地利用这一功能,我们需要进行一些必要的配置,并根据不同的场景调用合适的日志记录方法。 ### 步骤一:配置`...

    django实现日志按日期分割

    在Django项目的`settings.py`文件中,我们可以定义日志配置信息。以下是一个示例配置: ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format':...

    Django日志及中间件模块应用案例

    总结起来,Django日志和中间件的应用涉及到以下几个关键点: 1. 定制日志格式和配置处理器,如`RotatingFileHandler`,以处理日志文件的滚动和备份。 2. 创建日志实例并设置合适的日志级别,以便记录和分析所需信息...

    PyPI 官网下载 | django_models_logging-0.9.2-py3-none-any.whl

    资源全名:django_models_logging-0.9.2-py3-none-any.whl"确认了这个文件的来源以及其完整性,说明它是官方发布的,且在解压后可以用于Python环境安装。 **知识点详解** 1. **PyPI(Python Package Index)**:...

    Django官方Docs-1.8

    Django还提供了许多Web开发的通用工具,例如“Conditional View Processing”(条件视图处理)、“Cryptographic signing”(加密签名)、“Sending email”(发送电子邮件)、“Logging”(日志记录)、...

    Django多进程滚动日志问题解决方案

    在Django的`settings.py`中,通常会配置`logging`模块,使用`logging.RotatingFileHandler`来处理日志滚动。例如: ```python LOGGING = { ... 'handlers': { ... 'file': { 'level': 'INFO', 'class': '...

    基于Django实现日志记录报错信息

    在`LOGGING`配置中,定义了日志记录器`'django'`的处理器,这里指定了将日志信息输出到文件和控制台,并设置了日志级别为`INFO`。 通过上述配置,当服务器发生500错误时,日志记录器不仅仅会记录简单的500状态码...

    django中的setting最佳配置小结

    5. **日志配置 (LOGGING)**: Django的日志配置允许你控制何时和如何记录信息。在这里,我们设置了`django.db.backends` logger 的级别为`DEBUG`,这样,每次执行SQL操作时,都会在控制台打印出对应的SQL语句。 6....

Global site tag (gtag.js) - Google Analytics