Settings 中 日志的配置

    xiaoxiao2021-11-09  80

    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语句的日志。

     

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

    转载请注明原文地址: https://ju.6miu.com/read-678130.html

    最新回复(0)