def test_loguru(): os.environ['LOGURU_LEVEL'] = "INFO" from loguru import logger logger.debug(f"调试 {datetime.datetime.now()}") logger.info(f"信息提示 {datetime.datetime.now()}") logger.warning(f"警告 ======= {datetime.datetime.now()}") logger.error(f"错误 !!!!!! {datetime.datetime.now()}")
def test_mylog(): os.environ['HR_RUN_PROD'] = "y" os.environ['HR_LOG_FILE'] = "/tmp/logger-test.log" os.environ['HR_LOG_FILE_LEVEL'] = "ERROR" os.environ['HR_LOG_CONSOLE'] = "y" from feedwork.utils import logger logger.debug(f"调试 {datetime.datetime.now()}") logger.info(f"信息提示 {datetime.datetime.now()}") logger.warning(f"警告 ======= {datetime.datetime.now()}") logger.error(f"错误 !!!!!! {datetime.datetime.now()}")
def __setup_connection(self): """ 创建数据库连接。当数据库连接无法构建时抛出RuntimeError异常。 """ # 当连接不为空时,意味着使用者通过构造器构造了连接,导致重复调用该方法,所以此处直接返回,不抛出异常 if self.conn is not None: logger.trace(f"{self.id} reuse autocommit={self.conn.autocommit}") return dbinfo = self.dbinfo try: start_time = time.time() if ConnWay.DIRECTLY.value == dbinfo.way: dsn = dbinfo.host + ":" + str( dbinfo.port) + "/" + dbinfo.dbname self.conn = self.database_manager.create_connection( dbinfo.host, dbinfo.port, dbinfo.dbname, dbinfo.username, dbinfo.password, dsn) self.__conn_origin = self.conn elif ConnWay.POOL.value == dbinfo.way: from feedwork.database.init_database_pool import database_pool self.conn = database_pool[dbinfo.name].connection() # 连接池会对数据库连接进行封装,以下代码能拿到原始的数据库连接,从而能知道数据库连接的相关状态。该连接池没有提供状态查询接口 # 因为存储的是对象引用,所以可以直接修改该变量,从而修改数据库连接对象 self.__conn_origin = self.conn._con._con else: raise RuntimeError( f"{dbinfo.way} connection way is not support!") self.cursor = self.conn.cursor() logger.info( f"{self.id} new connection by {dbinfo.way} {self.desc} autocommit -> {dbinfo.autocommit}" ) if dbinfo.show_conn_time: logger.info( f"{self.id} database connection spend {time.time() - start_time}s" ) except Exception as e: raise RuntimeError( f"{dbinfo.name} can not connect to database! {e}") if dbinfo.autocommit: self.database_manager.get_or_set_autocommit( self.__conn_origin, True) else: self.begin_transaction() logger.debug(f"{self.id} connection setup success")
def begin_transaction(self): """ 开启数据库连接的事务。当数据库连接已经关闭时抛出RuntimeError异常。 """ # conn.closed不反映服务器关闭/切断的连接。它仅表示客户端使用connection.close()关闭的连接 if self.is_closed(): raise RuntimeError( "The connection is closed before begin transaction!") if self.database_manager.get_or_set_autocommit( self.__conn_origin) is False: logger.debug("Already begin transaction") return self.database_manager.get_or_set_autocommit(self.__conn_origin, False) self.is_commited = False
import os import sys import pytest import datetime from feedwork.utils import logger logger.debug(f"调试 {datetime.datetime.now()}") logger.info(f"信息提示 {datetime.datetime.now()}") logger.error(f"错误 !!!!!! {datetime.datetime.now()}") @logger.catch def func(x, y, z): return 1 / (x + y + z) func(1, -1, 0) if __name__ == "__main__": pytest.main(["-q", os.path.basename(sys.argv[0])])
def file_list_indir(root_dir, index_mdfile): # root_dir目录下必须存在被检查的索引文件 if not os.path.isfile(os.path.join(root_dir, index_mdfile)): logger.error(f"{index_mdfile} is not real file") return None file_list = [] for cur_root_dir, sub_dirs, filenames in os.walk(root_dir): # for file in glob.glob(f"{root_dir}/*"): for filename in filenames: if filename == index_mdfile: continue cur_file = os.path.join(cur_root_dir, filename) # 每个文件名,都是 root_dir 开头的 file_list.append(os.path.join(cur_root_dir, filename)) logger.info(f"file={filename}") return file_list if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--dir', type=str, help="从该目录开始检查其索引文件的完整性") parser.add_argument('--idxfile', type=str, help="被检查的索引文件名") args = parser.parse_args() root_dir = args.dir index_mdfile = args.idxfile logger.debug(f"root_dir={root_dir}, index_mdfile={index_mdfile}") logger.debug(file_list_indir(root_dir, index_mdfile))