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常見的解決方案,希望對大家有所幫助。更多Python學習指路:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2828191/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 常見的跨域解決方案(全)跨域
- git 常見問題的解決方案Git
- 常見的高可用MySQL解決方案MySql
- 常見的高可用 MySQL 解決方案MySql
- 常見問題及解決方案
- CSS常見佈局解決方案CSS
- Kafka常見的問題及解決方案Kafka
- 常見的光纖故障及其解決方案
- 高併發解決方案詳解(9大常見解決方案)
- 前端常見跨域解決方案(全)前端跨域
- WordPress:常見問題及解決方案
- 【彙總】Python語言常見報錯及解決方案!Python
- 常見的高可用MySQL解決方案轉載MySql
- JAVA常見中文問題的解決方案(轉)Java
- 快取常見問題及解決方案快取
- Java™ 教程(常見問題及其解決方案)Java
- Hadoop常見錯誤及解決方案Hadoop
- 總結下常見佈局解決方案
- 開發常見錯誤及解決方案
- Django常見出錯解決方案彙總Django
- RecyclerView的使用總結以及常見問題解決方案View
- Tomcat常見異常及解決方案程式碼例項Tomcat
- javaWeb常見異常的解決方法JavaWeb
- 常見BUG解決
- 電信行業專案管理解決方案(常見挑戰&解決方案)行業專案管理
- 新手linux系統常見問題解決方案Linux
- 物聯網路卡常見問題及解決方案
- CrashSight 接入上報常見問題及解決方案
- 【FAQ】推送服務常見問題及解決方案
- 普通raid常見故障解和決方案彙總AI
- 爬蟲專案常見問題及解決方案爬蟲
- MySQL資料庫常見錯誤及解決方案MySql資料庫
- iPhone 6/Plus常見使用問題及解決方案iPhone
- Q9使用常見問題及解決方案
- 【FAQ】整合分析服務的常見問題及解決方案
- 分散式事務的理解和常見解決方案彙總分散式
- SAP質量管理模組常見問題及解決方案
- react 記憶體洩露常見問題解決方案React記憶體洩露