python(14)實踐Django-logging

在工作中遇到的開發對logging的使用是分兩個極端的,有些人喜歡把什么信息都打印出來,一不小心日志就刷屏,另一些人什么信息都不打印,當功能操作不對時定位問題都不知道從哪里開始。

個人認為使用日志的目的是定位問題方便,圍繞著容易出問題的地方,最好有日志出現。

在當前的項目中容易出問題的是在和Jenkins交互的過程中,因此在jenkins的任務中加入日志。

  1. setting配置
    # Logging setting
      LOGGING = {
         'version': 1,
         'disable_existing_loggers': False,
         'formatters': {
             'verbose': {
                 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
             },
             'main': {
                 'datefmt': '%Y-%m-%d %H:%M:%S',
                 'format': '%(asctime)s [%(module)s %(levelname)s] %(message)s',
             },
             'simple': {
                'format': '%(levelname)s %(message)s'
             },
        },
     'handlers': {
         'null': {
             'level': 'DEBUG',
             'class': 'logging.NullHandler',
         },
         'console': {
             'level': 'DEBUG',
             'class': 'logging.StreamHandler',
             'formatter': 'main'
         },
         'file': {
             'level': 'DEBUG',
             'class': 'logging.FileHandler',
             'formatter': 'main',
             'filename': os.path.join(BASE_DIR, 'data/logs', 'Testmanager.log')
         },
         'jenkins_logs': {
             'level': 'DEBUG',
             'class': 'logging.FileHandler',
             'formatter': 'main',
             'filename': os.path.join(BASE_DIR, 'data/logs', 'jenkins.log')
         },
     },
     'loggers': {
         'django': {
             'handlers': ['null'],
             'propagate': False,
             'level': LOG_LEVEL,
         },
          'django.request': {
              'handlers': ['console', 'file'],
              'level': LOG_LEVEL,
              'propagate': False,
          },
          'django.server': {
               'handlers': ['console', 'file'],
               'level': LOG_LEVEL,
               'propagate': False,
          },
           'Testmanager': {
               'handlers': ['console', 'file'],
               'level': LOG_LEVEL,
           },
           'devops.tasks': {
               'handlers': ['console', 'jenkins_logs'],
               'level': LOG_LEVEL,
            }
        }
    }
    
  2. 再devops的tasks任務中加日志
    import logging
    logger = logging.getLogger(__name__)
    
    @shared_task
    def update_pci_build_by_jenkins(job_name,build_number,pci_build_id,pid):
    jen = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_passwd)
    pci_build = PCI_BUILDS.objects.get(id=pci_build_id)
    pci = PCI.objects.get(id=pid)
    # 最后一次build號
    logger.info('update_pci_build_by_jenkins:' + "pci:" +  str(pid) + ':job_name:' + job_name + ':build_number:' + str(build_number) )
    times = jen.get_build_info(job_name, build_number)['timestamp']
    # build的日期
    result = jen.get_build_info(job_name, build_number)['result']
    ...
    
  3. 查看日志結果
    在data/logs/目錄下生成jenkins.log文件
    jenkins.log中記錄
    2017-08-09 19:02:02 [tasks INFO update_pci_build_by_jenkins:pci:3:job_name:epg_probe_collect:build_number:24
    
  4. 補充
    logger.critical()
    logger.error()
    logger.warning()
    logger.info()
    logger.debug()
    可根據日志信息的性質選擇打壓日志的級別。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容