zoukankan      html  css  js  c++  java
  • 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}}成功]
  • 相关阅读:
    ffmpeg命令行获取RTSP流并每秒截取一张解码存储为jpg
    快速排序
    ffmpeg参数中文详细解释
    Docker
    elasticsearch的安装和配置
    C 语言-运算符(算术运算符,类型转换,赋值运算符,自增,自减,sizeof 运算符,逗号运算符,关系运算符,逻辑运算符,三目运算符)
    c语言-printf函数和scanf函数简单使用
    将JPA通用的实现方法封装成一个抽象类进行拓展
    工具类里的静态变量如何获取application.yml或者application.properties里的属性
    记java实体类属性名为全部为大写踩的坑(基础)
  • 原文地址:https://www.cnblogs.com/dingchuan/p/9381773.html
Copyright © 2011-2022 走看看