当前位置: 首页 > 图灵资讯 > 行业资讯> python logging常见的解决方案

python logging常见的解决方案

来源:图灵python
时间: 2024-06-27 19:29:09

说明

1、输出文件、控制台和Elasticsearch。

输出到控制台只是方便直接查看。

2、直接将输出到文件中存储,并保留所有历史记录的备份。

3、输出到Elasticsearch,直接作为存储和分析的中心。

Kibana可以很方便地分析和检查操作情况。

实例

importlogging
importsys
fromosimportmakedirs
fromos.pathimportdirname,exists

fromcmreslogging.handlersimportCMRESHandler

loggers={}

LOG_ENABLED=True#日志是否打开
LOG_TO_CONSOLE=True#是否输出到控制台
LOG_TO_FILE=True#是否输出到文件
LOG_TO_ES=True#是否输出到Elasticsearch?

LOG_PATH='./runtime.log'#日志文件路径
LOG_LEVEL='DEBUG'#日志级别
LOG_FORMAT='%(levelname)s-%(asctime)s-process:%(process)d-%(filename)s-%(name)s-%(lineno)d-%(module)s-%(message)s'#每个日志输出格式
ELASTIC_SEARCH_HOST='eshost'#ElasticsearchHost
ELASTIC_SEARCH_PORT=9200#ElasticsearchPort
ELASTIC_SEARCH_INDEX='runtime'#ElasticsearchIndexName
APP_ENVIRONMENT='dev'#运行环境,测试环境或生产环境

defget_logger(name=None):
"""
getloggerbyname
:paramname:nameoflogger
:return:logger
"""
globalloggers

ifnotname:name=__name__

ifloggers.get(name):
returnloggers.get(name)

logger=logging.getLogger(name)
logger.setLevel(LOG_LEVEL)

#输出到控制台
ifLOG_ENABLEDandLOG_TO_CONSOLE:
stream_handler=logging.StreamHandler(sys.stdout)
stream_handler.setLevel(level=LOG_LEVEL)
formatter=logging.Formatter(LOG_FORMAT)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

#输出到文件
ifLOG_ENABLEDandLOG_TO_FILE:
#若路径不存在,创建日志文件文件夹
log_dir=dirname(log_path)
ifnotexists(log_dir):makedirs(log_dir)
#添加FileHandler
file_handler=logging.FileHandler(log_path,encoding='utf-8')
file_handler.setLevel(level=LOG_LEVEL)
formatter=logging.Formatter(LOG_FORMAT)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

#Elasticsearch输出
ifLOG_ENABLEDandLOG_TO_ES:
#添加CMRESHandler
es_handler=CMRESHandler(hosts=[{'host':ELASTIC_SEARCH_HOST,'port':ELASTIC_SEARCH_PORT}],
#相应的认证权限可以配置
auth_type=CMRESHandler.AuthType.NO_AUTH,
es_index_name=ELASTIC_SEARCH_INDEX,
#一个月一个月一个Index
index_name_frequency=CMRESHandler.IndexNameFrequency.MONTHLY,
#增加额外的环境标志
es_additional_fields={'environment':APP_ENVIRONMENT}
)
es_handler.setLevel(level=LOG_LEVEL)
formatter=logging.Formatter(LOG_FORMAT)
es_handler.setFormatter(formatter)
logger.addHandler(es_handler)

#保存全局loggers
loggers[name]=logger
returnlogger

以上是python 常见的logging解决方案,希望对大家有所帮助。更多Python学习指导:基础教程python基础教程

本教程的操作环境:windows7系统,Python 3.9.1,DELL G3电脑。