【Python】顺手常用的自定义configloggermysqldb包

mac2022-06-30  19

config.py

# -*- coding: utf-8 -*- import os import ConfigParser __all__ = ['config'] class Config(object): def __init__(self, path): self.conf = ConfigParser.ConfigParser() self.conf.read(path) self.path = path def getter(self, section, name): return self.conf.get(section, name) def setter(self, section, name, value): if not self.conf.has_section(section): self.conf.add_section(section) if type(value) == int: value = str(value) self.conf.set(section, name, value) self.conf.write(open(self.path, "w")) config = Config(os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, '../config/setting.conf')))

 

logger.py (依赖于从config里读取log文件)

# -*- coding: utf-8 -*- import os import logging import sys import datetime from logging.handlers import RotatingFileHandler from config import config class Formatter(logging.Formatter): default_formatter = '[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s' def __init__(self, formats, datefmt=None): self._fmt = self.default_formatter self.formatters = {} if type(formats).__name__ == 'dict': for loglevel in formats: self.formatters[loglevel] = formats[loglevel] self.datefmt = datefmt def formatTime(self, record, datefmt=None): time_format = str(datetime.datetime.now()).replace('.', ':')[:-3] return time_format def format(self, record): record.message = record.getMessage() record.asctime = self.formatTime(record, self.datefmt) if record.__dict__['levelno'] in self.formatters: s = self.formatters[record.__dict__['levelno']] % record.__dict__ else: s = self._fmt % record.__dict__ if record.exc_info: if not record.exc_text: record.exc_text = self.formatException(record.exc_info) if record.exc_text: if s[-1:] != "\n": s = s + "\n" try: s = s + record.exc_text except UnicodeError: s = s + record.exc_text.decode(sys.getfilesystemencoding(), 'replace') return s def log_init(logger): # file backup_count = config.getter('log', 'count') log_size = config.getter('log', 'size') path = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, config.getter('log', 'path'))) file_formatter = Formatter('[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s') file_log = RotatingFileHandler(path, maxBytes=log_size * 1024 * 1024, backupCount=backup_count) file_log.setFormatter(file_formatter) logger.addHandler(file_log) # console concole_formatter = Formatter({ logging.DEBUG: '\033[1;36;40m[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s\033[0m', logging.INFO: '\033[1;32;40m[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s\033[0m', logging.WARNING: '\033[1;33;40m[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s\033[0m', logging.ERROR: '\033[1;31;40m[%(process)d]%(asctime)s - [%(levelname)s] - [%(name)s.%(module)s::%(funcName)s] %(message)s\033[0m'}) console_log = logging.StreamHandler() console_log.setFormatter(concole_formatter) # level log_level = {'debug': logging.DEBUG, 'info': logging.INFO, 'warn': logging.WARNING, 'error': logging.ERROR} logger.setLevel(log_level[config.getter('log', 'level')]) if config.getter('log', 'console') == 'true': logger.addHandler(console_log) return logger logs = log_init(logging.getLogger()) if __name__ == '__main__': logs.debug('debug')

db.py(依赖config获取mysql连接信息)

单实例带锁,不适用于大并发场景,大并发请用连接池

# -*- coding: utf-8 -*- import MySQLdb from config import config from logger import logs from MySQLdb import escape_string from threading import Lock mutex = Lock() class MySQLClient(object): def __init__(self, charset="utf8"): self.charset = charset dbs = { 'user': config.getter('mysql', 'user'), 'passwd': config.getter('mysql', 'password'), 'host': config.getter('mysql', 'host'), 'db': config.getter('mysql', 'dbname') } self.kwargs = dbs self.db_object = MySQLdb.connect(charset=self.charset, **self.kwargs) def query(self, query): mutex.acquire() try: self.db_object.ping() except Exception as e: logs.error(e) logs.info('reconnect mysql') self.db_object = MySQLdb.connect(charset=self.charset, **self.kwargs) try: cursor = self.db_object.cursor() logs.debug(query) cursor.execute(query) self.db_object.commit() data = cursor.fetchall() cursor.close() except Exception as e: logs.error('error sql:%s' % query) logs.error(e) data = None mutex.release() return data @staticmethod def escape_str(s): return escape_string(s) db = MySQLClient()

 

转载于:https://www.cnblogs.com/caizhifeng/p/10283743.html

最新回复(0)