1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
""" ------------------------------------------------
describe: 日志
record system information level: debug, info, warning, error, critical
CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10
formatter: %(levelno)s:打印日志级别的数值。
%(levelname)s:打印日志级别的名称。
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]。
%(filename)s:打印当前执行程序名。
%(funcName)s:打印日志的当前函数。
%(lineno)d:打印日志的当前行号。
%(asctime)s:打印日志的时间。
%(thread)d:打印线程ID。
%(threadName)s:打印线程名称。
%(process)d:打印进程ID。
%(processName)s:打印线程名称。
%(module)s:打印模块名称。
%(message)s:打印日志信息。
base_info: __author__ = "PyGo" __time__ = "2022/9/14" __version__ = "v.1.0.0" __mail__ = "gaoming971366@163.com" __project__ = "quality-inspect"
usage: from app.utils.logger import logger
logger.debug('message') logger.info('message') logger.warning('message') logger.error('message') logger.critical('message')
design:
reference urls:
python version: python3
Enjoy the good time everyday!!! Life is short, I use python.
------------------------------------------------ """
import datetime import inspect import logging import os import sys from logging.handlers import RotatingFileHandler from config import LOG_DIR, LOG_LEVEL, LOG_FORMATTER, LOG_FILENAME_PREFIX
LEVEL = { 'debug': logging.DEBUG, 'info': logging.INFO, 'warning': logging.WARNING, 'error': logging.ERROR, 'critical': logging.CRITICAL }
logger = logging.getLogger(__name__)
def _get_cur_folder(): if getattr(sys, "frozen", False): return os.path.dirname(os.path.abspath(__file__)) else: cur_folder = os.path.dirname(inspect.getfile(inspect.currentframe())) return os.path.abspath(cur_folder)
def _get_now(format="%Y-%m-%d %H:%M:%S"): return datetime.datetime.strftime(datetime.datetime.now(), format)
def __get_log_dir(): return os.path.join(_get_cur_folder(), 'log')
logdir = LOG_DIR level = LOG_LEVEL formatter = LOG_FORMATTER filename_prefix = LOG_FILENAME_PREFIX
if not logdir: logdir = __get_log_dir() if not os.path.exists(logdir): try: os.makedirs(logdir) logger.critical('====== log dir is not exist, create: %s ======' % logdir) except: logger.critical('====== log dir is not exist and create failure, exist: %s ======' % logdir) sys.exit(1) if not level: level = 'debug'
if not formatter: formatter = '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s - %(message)s' formatter = logging.Formatter(formatter, datefmt='%Y/%m/%d %H:%M:%S')
log_level = LEVEL.get(level) logger.setLevel(level=log_level)
log_name = filename_prefix + '_' + _get_now(format="%Y-%m-%d") \ if filename_prefix and filename_prefix != '-' else _get_now(format="%Y-%m-%d") log_file = os.path.join(logdir, (log_name + '.log')) file_handler = RotatingFileHandler(log_file, mode='a', maxBytes=10*1024*1024, backupCount=10, encoding='utf-8') file_handler.setLevel(log_level) file_handler.setFormatter(formatter) logger.addHandler(file_handler)
stream_handler = logging.StreamHandler() stream_handler.setLevel(log_level) stream_handler.setFormatter(formatter) logger.addHandler(stream_handler)
|