Python3如何日志同時(shí)輸出到控制臺(tái)和文件
Python3日志同時(shí)輸出到控制臺(tái)和文件
python3中想要將程序的日志打印到文件中,便于后期查看原因。
但是在開發(fā)階段又想讓日志打印到控制臺(tái),這時(shí)候可以用一個(gè)類將其封裝起來,用法就跟java差不多,配置也很簡單。
需要用到python內(nèi)置模塊 logging 和其中的函數(shù)handlers。
直接上代碼
import logging from logging import handlers # 日志輸出 class Logger(object): # 日志級(jí)別關(guān)系映射 level_relations = { "debug": logging.DEBUG, "info": logging.INFO, "warning": logging.WARNING, "error": logging.ERROR, "critical": logging.CRITICAL } def __init__(self, filename="../log/test.log", level="info", when="D", backupCount=3, fmt="%(asctime)s - %(pathname)s[line:%(lineno)d] - %" "(levelname)s: %(message)s"): # 設(shè)置日志輸出格式 format_str = logging.Formatter(fmt) # 設(shè)置日志在控制臺(tái)輸出 streamHandler = logging.StreamHandler() # 設(shè)置控制臺(tái)中輸出日志格式 streamHandler.setFormatter(format_str) # 設(shè)置日志輸出到文件(指定間隔時(shí)間自動(dòng)生成文件的處理器 --按日生成) # filename:日志文件名,interval:時(shí)間間隔,when:間隔的時(shí)間單位, backupCount:備份文件個(gè)數(shù),若超過這個(gè)數(shù)就會(huì)自動(dòng)刪除 fileHandler = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backupCount, encoding="utf-8") # 設(shè)置日志文件中的輸出格式 fileHandler.setFormatter(format_str) # 設(shè)置日志輸出文件 self.logger = logging.getLogger(filename) # 設(shè)置日志級(jí)別 self.logger.setLevel(self.level_relations.get(level)) # 將輸出對(duì)象添加到logger中 self.logger.addHandler(streamHandler) self.logger.addHandler(fileHandler)
用法就跟java一樣,創(chuàng)建一個(gè)Logger對(duì)象,通過對(duì)象去操作。
log = Logger(level="debug").logger log.debug("debuf") log.info("info") log.warning("warning") log.error("error")
可以在控制臺(tái)中看到如下打印信息:
2019-07-02 21:32:25,553 - E:/python/ryan_py/tsunagaru/logger.py[line:30] - DEBUG: debuf
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:31] - INFO: info
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:32] - WARNING: warning
2019-07-02 21:32:25,626 - E:/python/ryan_py/tsunagaru/logger.py[line:33] - ERROR: error
Process finished with exit code 0
同時(shí),還可以看到在父級(jí)同級(jí)的目錄下的/log中創(chuàng)建了一個(gè)名叫test.log的文件。
打開test.log文件,可以看到里面的內(nèi)容跟控制臺(tái)上的輸出內(nèi)容是一致的。
2019-07-02 21:32:25,553 - E:/python/ryan_py/tsunagaru/logger.py[line:30] - DEBUG: debuf
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:31] - INFO: info
2019-07-02 21:32:25,625 - E:/python/ryan_py/tsunagaru/logger.py[line:32] - WARNING: warning
2019-07-02 21:32:25,626 - E:/python/ryan_py/tsunagaru/logger.py[line:33] - ERROR: error
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Selenium實(shí)現(xiàn)簡單的網(wǎng)絡(luò)自動(dòng)化操作指南
Selenium是一個(gè)用于Web應(yīng)用測(cè)試的工具,Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣,這篇文章主要給大家介紹了關(guān)于如何使用Selenium實(shí)現(xiàn)簡單的網(wǎng)絡(luò)自動(dòng)化操作的相關(guān)資料,需要的朋友可以參考下2024-03-03python中ASCII碼字符與int之間的轉(zhuǎn)換方法
今天小編就為大家分享一篇python中ASCII碼字符與int之間的轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python Serial串口基本操作(收發(fā)數(shù)據(jù))
這篇文章主要介紹了Python Serial串口基本操作(收發(fā)數(shù)據(jù)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python使用pypdf2實(shí)現(xiàn)pdf文檔解密
利用pypdf2完成pdf的解密,這里的事例是python3環(huán)境下的,當(dāng)然python2下也可以運(yùn)行,只需要修改名稱即可,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12使用Python通過win32 COM打開Excel并添加Sheet的方法
今天小編就為大家分享一篇使用Python通過win32 COM打開Excel并添加Sheet的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python enumerate遍歷數(shù)組示例應(yīng)用
遍歷數(shù)組的python代碼2008-09-09