python常用模块
一 logging模块
CRITICAL = 50 #FATAL = CRITICAL ERROR = 40 WARNING = 30 #WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 #不设置
常用配置文件使用logging
1 """ 2 logging配置 3 """ 4 # 定义三种日志输出格式 开始 5 6 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ 7 '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 8 9 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' 10 11 id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' 12 13 14 # log文件的全路径 15 fh1_logfile_path = 'b1.log' 16 fh2_logfile_path = 'b2.log' 17 18 # log配置字典 19 LOGGING_DIC = { 20 'version': 1, 21 'disable_existing_loggers': False, 22 'formatters': { 23 'standard': { 24 'format': standard_format 25 }, 26 'simple': { 27 'format': simple_format 28 }, 29 }, 30 'filters': {}, 31 'handlers': { 32 #打印到终端的日志,使用的格式为 simple_format 33 'ch': { 34 'level': 'DEBUG', 35 'class': 'logging.StreamHandler', # 打印到屏幕 36 'formatter': 'simple' 37 }, 38 #打印到文件b1.log的日志,使用的格式为 standard_format 39 'fh1': { 40 'level': 'DEBUG', 41 'class': 'logging.FileHandler', # 保存到文件 42 'formatter': 'standard', 43 'filename': fh1_logfile_path, # 日志文件 44 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 45 }, 46 #打印到文件b2.log的日志,使用的格式为 standard_format 47 'fh2': { 48 'level': 'DEBUG', 49 'class': 'logging.FileHandler', # 保存到文件 50 'formatter': 'standard', 51 'filename': fh2_logfile_path, # 日志文件 52 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 53 }, 54 }, 55 'loggers': { 56 # 'logger1': { 57 # 'handlers': ['ch', 'fh1','fh2'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 58 # 'level': 'DEBUG', 59 # 'propagate': False, 60 # }, 61 # '交易日志': { 62 # 'handlers': ['ch', 'fh1','fh2'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 63 # 'level': 'DEBUG', 64 # 'propagate': False, 65 # }, 66 # '用户权限': { 67 # 'handlers': ['ch', 'fh1','fh2'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 68 # 'level': 'DEBUG', 69 # 'propagate': False, 70 # }, 71 72 '': { # 空字符串表示为通配的logger配置,但找不到匹配的logger名的key时采用 73 'handlers': ['ch', 'fh1','fh2'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 74 'level': 'DEBUG', 75 'propagate': False, 76 }, 77 }, 78 }
1 import settings 2 import logging.config 3 4 logging.config.dictConfig(settings.LOGGING_DIC) 5 # logger1=logging.getLogger('logger1') 6 # logger1=logging.getLogger('交易日志') 7 # 8 # logger1.debug('测试日志') 9 10 # logger2=logging.getLogger('用户权限') 11 # logger2.debug('测试日志') 12 13 # import logging.config 的时候 logging也被导入的进来 14 logger1=logging.getLogger('交易日志') 15 logger2=logging.getLogger('用户权限') 16 logger1.debug('测试日志') 17 logger2.debug('测试日志') 18 19 20 # 完整的日志内容; 21 # 时间 22 # 级别 23 # 类型:跟什么业务有关 24 # 文件名/行号 25 # 具体的内容
二 datetime模块
在计算机中,时间实际上是用数字表示的。我们把1970年1月1日00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的世界timestamp为负数),当前的时间相对于epoch time的秒数,称为timestamp。
timestamp的值为时区毫无关系,因为timestamp一但确定,其UTC时间就确定了,转换到任何时区也是确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp是相同的(前提:时间已校准)。
参考: