這篇文章主要介紹“python logging的說明和實例用法”,在日常操作中,相信很多人在python logging的說明和實例用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python logging的說明和實例用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
說明
1、輸出文件、控制臺和Elasticsearch。
輸出到控制臺只是方便直接查看。
2、輸出到文件直接存儲,保留所有歷史記錄的備份。
3、輸出到Elasticsearch,直接作為存儲和分析的中心。
Kibana可以非常方便地分析和查看運行情況。
實例
import logging
import sys
from os import makedirs
from os.path import dirname, exists
from cmreslogging.handlers import CMRESHandler
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' # Elasticsearch Host
ELASTIC_SEARCH_PORT = 9200 # Elasticsearch Port
ELASTIC_SEARCH_INDEX = 'runtime' # Elasticsearch Index Name
APP_ENVIRONMENT = 'dev' # 運行環境,如測試環境還是生產環境
def get_logger(name=None):
"""
get logger by name
:param name: name of logger
:return: logger
"""
global loggers
if not name: name = __name__
if loggers.get(name):
return loggers.get(name)
logger = logging.getLogger(name)
logger.setLevel(LOG_LEVEL)
# 輸出到控制臺
if LOG_ENABLED and LOG_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)
# 輸出到文件
if LOG_ENABLED and LOG_TO_FILE:
# 如果路徑不存在,創建日志文件文件夾
log_dir = dirname(log_path)
if not exists(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
if LOG_ENABLED and LOG_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
return logger到此,關于“python logging的說明和實例用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。