在工作中遇到的开发对logging的使用是分两个极端的,有些人喜欢把什么信息都打印出来,一不小心日志就刷屏,另一些人什么信息都不打印,当功能操作不对时定位问题都不知道从哪里开始。
个人认为使用日志的目的是定位问题方便,围绕着容易出问题的地方,最好有日志出现。
在当前的项目中容易出问题的是在和Jenkins交互的过程中,因此在jenkins的任务中加入日志。
- 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, } } }
- 再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'] ...
- 查看日志结果
在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
- 补充
logger.critical()
logger.error()
logger.warning()
logger.info()
logger.debug()
可根据日志信息的性质选择打压日志的级别。