Python3如何日志同時輸出到控制臺和文件
Python3日志同時輸出到控制臺和文件
python3中想要將程序的日志打印到文件中,便于后期查看原因。
但是在開發(fā)階段又想讓日志打印到控制臺,這時候可以用一個類將其封裝起來,用法就跟java差不多,配置也很簡單。
需要用到python內(nèi)置模塊 logging 和其中的函數(shù)handlers。
直接上代碼
import logging
from logging import handlers
# 日志輸出
class Logger(object):
# 日志級別關(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è)置日志在控制臺輸出
streamHandler = logging.StreamHandler()
# 設(shè)置控制臺中輸出日志格式
streamHandler.setFormatter(format_str)
# 設(shè)置日志輸出到文件(指定間隔時間自動生成文件的處理器 --按日生成)
# filename:日志文件名,interval:時間間隔,when:間隔的時間單位, backupCount:備份文件個數(shù),若超過這個數(shù)就會自動刪除
fileHandler = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backupCount, encoding="utf-8")
# 設(shè)置日志文件中的輸出格式
fileHandler.setFormatter(format_str)
# 設(shè)置日志輸出文件
self.logger = logging.getLogger(filename)
# 設(shè)置日志級別
self.logger.setLevel(self.level_relations.get(level))
# 將輸出對象添加到logger中
self.logger.addHandler(streamHandler)
self.logger.addHandler(fileHandler)用法就跟java一樣,創(chuàng)建一個Logger對象,通過對象去操作。
log = Logger(level="debug").logger
log.debug("debuf")
log.info("info")
log.warning("warning")
log.error("error")可以在控制臺中看到如下打印信息:
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
同時,還可以看到在父級同級的目錄下的/log中創(chuàng)建了一個名叫test.log的文件。

打開test.log文件,可以看到里面的內(nè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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python-jwt用戶認(rèn)證食用教學(xué)的實現(xiàn)方法
這篇文章主要介紹了python-jwt用戶認(rèn)證食用教學(xué)的實現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
Python matplotlib實現(xiàn)圖表主題變換示例詳解
在畫圖的時候如果出現(xiàn)與圖表的顏色沖突或者看不清坐標(biāo)軸的情況,這時候可以通過更換坐標(biāo)軸風(fēng)格來解決,本文將為大家詳細(xì)介紹如何利用matplotlib實現(xiàn)圖表的主題樣式變換,需要的可以參考一下2022-03-03
Python基本結(jié)構(gòu)之判斷語句的用法詳解
在程序的設(shè)計當(dāng)中,代碼并不是逐步按照順序進(jìn)行執(zhí)行的,在運行到某一行代碼當(dāng)中,需要停下進(jìn)行判斷接下來將要運行到那一個分支代碼,這種判斷就代表的是分支結(jié)構(gòu)。分支結(jié)構(gòu)是可以使用?if?語句來進(jìn)行判斷的,而我們本篇博客講的也是?if?語句,需要的可以了解一下2022-07-07
詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程
這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python創(chuàng)建相同值數(shù)組/列表的兩種方法
眾所周知數(shù)組是一種用來在計算機中存儲連續(xù)的相同類型數(shù)值的數(shù)據(jù)結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于Python創(chuàng)建相同值數(shù)組/列表的兩種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Pyecharts 中Geo函數(shù)常用參數(shù)的用法說明
這篇文章主要介紹了Pyecharts 中Geo函數(shù)常用參數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Python+OpenCV實戰(zhàn)之實現(xiàn)文檔掃描
這篇文章主要為大家詳細(xì)介紹了Python+Opencv如何實現(xiàn)文檔掃描的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09

