python中logging的常用方法

來源:互聯網
上載者:User

標籤:cond   uri   err   覆蓋   process   backup   名稱   指定   寫入   

logging常用
# -*- coding:utf-8 -*-__author__ = "lgj"import osimport sysimport timeimport loggingfrom logging.handlers import TimedRotatingFileHandlerfrom instance.test import LOG_LEVEL,LOG_NAMEset_level = getattr(logging, LOG_LEVEL.upper(), None)if not isinstance(set_level, int):    raise ValueError(‘Invalid log level:%s‘ % LOG_LEVEL)# 擷取logger執行個體,如果參數為空白則返回root logger,不同模組最好使用不同執行個體名字logger = logging.getLogger("camel")# 指定日誌的最低輸出層級,預設為WARN層級logger.setLevel(LOG_LEVEL)# 指定logger輸出格式formatter = logging.Formatter(    ‘%(asctime)s %(filename)s [line:%(lineno)d] %(funcName)s %(levelname)s %(message)s %(process)d ‘)# 檔案日誌log_path = os.path.realpath(os.getcwd()) + ‘/log/‘file_handler = logging.FileHandler(log_path + LOG_NAME + ".log")file_handler.setFormatter(formatter)  # 可以通過setFormatter指定輸出格式# 控制台日誌console_handler = logging.StreamHandler(sys.stdout)console_handler.formatter = formatter  # 也可以直接給formatter賦值# 日誌輪轉--與file_handler同時存在時會造成日誌重複列印--具體詳情見下面日誌重複問題timeRotatingHandler = TimedRotatingFileHandler(log_path + ‘%s.log‘ % (LOG_NAME), when=‘midnight‘)timeRotatingHandler.setFormatter(formatter)timeRotatingHandler.suffix = "_%Y%m%d.log"# 為logger添加的Tlog器logger.addHandler(file_handler)logger.addHandler(console_handler)logger.addHandler(timeRotatingHandler)# 輸出不同層級的loglogger.debug(‘this is debug info‘)logger.info(‘this is information‘)logger.warn(‘this is warning message‘)logger.error(‘this is error message‘)logger.fatal(‘this is fatal message, it is same as logger.critical‘)logger.critical(‘this is critical message‘)
日誌輪轉的兩種方式
# myapp的初始化工作logger = logging.getLogger(‘myapp‘)logger.setLevel(logging.INFO)1、使用TimedRotatingFileHandler# 定義一個1秒換一次log檔案的handler ,保留3箇舊log檔案rotating_handler = logging.handlers.TimedRotatingFileHandler("log/myapp.log", when=‘S‘, interval=1, backupCount=3)# 設定尾碼名稱,跟strftime的格式一樣rotating_handler.suffix = "%Y-%m-%d_%H-%M-%S.log"logger.addHandler(rotating_handler)# 經測試, 並有效果輪轉了但保留檔案數有問題# 注意:filehanlder.suffix的格式必須這麼寫,才能自動刪除舊檔案,如果設定是天,就必須寫成“%Y-%m-%d.log”,寫成其他格式會導致刪除舊檔案不生效,這個配置在源碼裡能看出來。while True:    time.sleep(1)    logger.info("test")2、使用RotatingFileHandler# 寫入檔案,如果檔案超過100個Bytes,僅保留5個檔案。handler = logging.handlers.RotatingFileHandler(    ‘log/myapp.log‘, maxBytes=100, backupCount=5)logger.addHandler(handler)# 效果很好while True:    time.sleep(0.01)    logger.info("file test")TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])filename 是輸出記錄檔名的首碼,比如log/myapp.logwhen 是一個字串的定義如下:“S”: Seconds“M”: Minutes“H”: Hours“D”: Days“W”: Week day (0=Monday)“midnight”: Roll over at midnightinterval 是指等待多少個單位when的時間後,Logger會自動重建檔案,當然,這個檔案的建立取決於filename+suffix,若這個檔案跟之前的檔案有重名,則會自動覆蓋掉以前的檔案,所以有些情況suffix要定義的不能因為when而重複。backupCount 是保留日誌個數。預設的0是不會自動刪除掉日誌。若設3,則在檔案的建立過程中庫會判斷是否有超過這個3,若超過,則會從最先建立的開始刪除。注意:filehanlder.suffix的格式必須這麼寫,才能自動刪除舊檔案,如果設定是天,就必須寫成“%Y-%m-%d.log”,寫成其他格式會導致刪除舊檔案不生效。這個配置在源碼裡能看出來
日誌重複輸出的坑
你有可能會看到你打的日誌會重複顯示多次,可能的原因有很多,但總結下來就一個原因,日誌中使用了重複的handler或者handler輸出的檔案重複了(如TimedRotatingFileHandler、RotatingFileHandler與FileHandler輸出的檔案相同時)。可以參考 http://python.jobbole.com/86887/ 的解釋。
參考:
  • https://www.cnblogs.com/CJOKER/p/8295272.html
  • http://python.jobbole.com/86887/
  • 72579705

python中logging的常用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.