跨文件定义全局变量综合demo
项目目录结构
跨文件全局变量
- lib/glo.py
#!/usr/bin/env python2.7
class GlobalVar:
global_conf_dict = {}
def set_global_conf_dict(key, value):
GlobalVar.global_conf_dict[key] = value
def get_global_conf_dict(key, value=None):
try:
return GlobalVar.global_conf_dict[key]
except KeyError:
return value
- settings.py
import os
from lib import glo
def set_conf():
base_dir = os.path.dirname(os.path.abspath(__file__))
conf_dir = os.path.join(base_dir, "conf")
log_dir = os.path.join(base_dir, "logs")
# set global var
glo.set_global_conf_dict("base_dir", base_dir)
glo.set_global_conf_dict("CONF_DIR", os.path.join(base_dir, "conf"))
glo.set_global_conf_dict("ENV_CONF", os.path.join(conf_dir, "env.ini"))
glo.set_global_conf_dict("LOG_DIR", log_dir)
日志定义模块logging
- lib/logger_format.py
# coding=utf-8
import os
import logging
from logging import handlers
from lib import glo
import settings
settings.set_conf()
def set_logger(file_name):
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
log_file_info = file_name + ".INFO"
log_file_error = file_name + ".ERROR"
# 获取LOG_DIR全局变量
log_dir = glo.get_global_conf_dict("LOG_DIR")
file_name_info = os.path.join(log_dir, log_file_info)
file_name_error = os.path.join(log_dir, log_file_error)
# 定义格式
formatter_info = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
formatter_error = logging.Formatter("%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s")
# 按日志等级定义日志回滚和控制台显示
# 判断handler,解决logger封装成函数/方法,如果多次调用,日志重复输出问题
if not logger.handlers:
fh_info = handlers.RotatingFileHandler(filename=file_name_info, maxBytes=10 * 1024, backupCount=3)
fh_error = handlers.RotatingFileHandler(filename=file_name_error, maxBytes=10 * 1024, backupCount=3)
ch = logging.StreamHandler()
# 定义日志等级
ch.setLevel(logging.WARNING)
fh_info.setLevel(logging.INFO)
fh_error.setLevel(logging.ERROR)
# 加载日志格式
fh_info.setFormatter(formatter_info)
fh_error.setFormatter(formatter_info)
ch.setFormatter(formatter_error)
# 添加到Handler
logger.addHandler(fh_info)
logger.addHandler(fh_error)
logger.addHandler(ch)
return logger
配置文件读取模块ConfigParser
- lib/get_conf.py
# coding=utf-8
import settings
from lib import glo
from ConfigParser import ConfigParser
# 载入conf设置
settings.set_conf()
# 读取conf设置
env_conf = glo.get_global_conf_dict("ENV_CONF")
def get_conf(test_name):
cfg = ConfigParser()
cfg.read(env_conf)
sec = cfg.sections()
kv = {}
if test_name in sec:
items = cfg.items(test_name)
for i in items:
kv[i[0]] = i[1]
return kv
demo其它相关文件
- 配置文件 conf/env.ini
[mysql]
user=root
password=123456
port=3306
[http]
host=192.168.1.1
port=8080
- 测试文件 tests/test_mysql.py
# coding=utf-8
from lib.logger_format import set_logger
from lib.get_conf import get_conf
logger = set_logger("test_mysql.log")
if __name__ == '__main__':
mysql = get_conf("mysql")
user = mysql.get("user")
passwd = mysql.get("password")
port = mysql.get("port")
logger.info("test_info %s", user)
logger.warn("test warn %s" % passwd)
logger.error("test_error %s", port)
- 测试文件 tests/test_http.py
# coding=utf-8
from lib.logger_format import set_logger
from lib.get_conf import get_conf
logger = set_logger("test_http.log")
if __name__ == '__main__':
http = get_conf("http")
host = http.get("host", "127.0.0.1")
port = http.get("port", "80")
logger.warn("test_warn %s", host)
logger.error("test_error %s", port)
- 日志文件目录 logs/
日志文件(lib/logger_format.py 定义自动生成):
logs/test_http.log.ERROR
logs/test_http.log.INFO
logs/test_mysql.log.ERROR
logs/test_mysql.log.INFO