python logging常见的解决方案

说明

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基础教程

发表回复