1 import os 2 base_dir=os.path.dirname(os.path.dirname(__file__)) 3 base_db=os.path.join(base_dir,'db') 4 base_log=os.path.join(base_dir,'log') 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 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' 9 id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' 10 11 logfile_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) # log文件的目录 12 logfile_dir = logfile_dir+'/log' 13 logfile_name = 'shopping.log' # log文件名 14 15 # 如果不存在定义的日志目录就创建一个 16 if not os.path.isdir(logfile_dir): 17 os.mkdir(logfile_dir) 18 19 # log文件的全路径 20 logfile_path = os.path.join(logfile_dir, logfile_name) 21 22 # log配置字典 23 LOGGING_DIC = { 24 'version': 1, 25 'disable_existing_loggers': False, 26 'formatters': { 27 'standard': { 28 'format': standard_format 29 }, 30 'simple': { 31 'format': simple_format 32 }, 33 }, 34 'filters': {}, 35 'handlers': { 36 #打印到终端的日志 37 'console': { 38 'level': 'DEBUG', 39 'class': 'logging.StreamHandler', # 打印到屏幕 40 'formatter': 'simple' 41 }, 42 #打印到文件的日志,收集info及以上的日志 43 'default': { 44 'level': 'DEBUG', 45 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件 46 'formatter': 'standard', 47 'filename': logfile_path, # 日志文件 48 'maxBytes': 1024*1024*5, # 日志大小 5M 49 'backupCount': 5, 50 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 51 }, 52 }, 53 'loggers': { 54 #logging.getLogger(__name__)拿到的logger配置 55 '': { 56 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 57 'level': 'DEBUG', 58 'propagate': True, # 向上(更高level的logger)传递 59 }, 60 }, 61 }
输出:
[2018-07-28 13:19:37,991][MainThread:43136][task_id:bank][bank.py:31][INFO][账户alex还款1元成功]
[2018-07-28 13:25:38,842][MainThread:41504][task_id:user][user.py:20][INFO][账户karen注册成功,初始额度15000元]
[2018-07-28 13:26:25,185][MainThread:41852][task_id:user][user.py:28][INFO][账户karen登陆成功,剩余额度15000元]
[2018-07-28 13:26:36,917][MainThread:41852][task_id:bank][bank.py:18][INFO][账户karen成功转账1000元给账户andy]
[2018-07-28 13:26:41,246][MainThread:41852][task_id:bank][bank.py:31][INFO][账户karen还款2000元成功]
[2018-07-28 13:26:45,665][MainThread:41852][task_id:bank][bank.py:42][INFO][账户karen取款1000成功,手续费50.0元]
[2018-07-28 13:26:52,368][MainThread:41852][task_id:shop][shop.py:15][INFO][账户karen购买{'IPhone': {'price': 8800, 'count': 1}}成功]