Settings 中 日志的配置

本文详细介绍Django项目中如何配置日志系统,包括不同类型的日志处理器设置、日志级别控制及输出格式定制等内容。

Settings 中 日志的配置

 

在settings中配置LOGGINGS文件,在BASE_DIR目录下创建相应的文件夹就可以生成相应的运行日志了。通过日志我们可以分析到错误在什么地方,有什么异常。在生产环境下有很大的用处。

 

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'),          

'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'), 

           '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'),

           'maxBytes': 1024*1024*5, # 5 MB

           'backupCount': 5,

           'formatter':'standard',

       },

   },

   'loggers': {

       'django': {

           'handlers': ['default','console'],

           'level': 'DEBUG',

           'propagate': False

       },

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

views.py 中

 

程序代码程序代码

 

import logging

logger = logging.getLogger('Lvze.app')

logger.info('aaa')

logger.error('error occurs')

 

这个时候也会找到 Lvze.app 去处理,虽然没有定义 "Lvze.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语句的日志。

 

实际上很多配置文件配置日志部分都大同小异,很多可以公用,所以不必每次都从头编写,往往复制已有的进行修改即可。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值