• Python 通用日志模块


     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}}成功]
  • 相关阅读:
    用js写留言信息的判断非空条件
    tp3.2中怎么访问分类及子分类下面的文章
    关于PHP中的 serialize () 和 unserialize () 的使用(即关于PHP中的值与已存储的表示的相互转换)
    iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
    iOS深入学习(Block全面分析)
    面试4
    Android
    android适配不同分辨率的手机
    android分辨率适配
    Android屏幕适配全攻略(最权威的官方适配指导)
  • 原文地址:https://www.cnblogs.com/dingchuan/p/9381773.html
Copyright © 2020-2023  润新知