前言:
在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中缔赠,為了準(zhǔn)確的定位出bug蜂林,需要對(duì)錯(cuò)誤進(jìn)行日志記錄傀广,這里簡(jiǎn)要記錄一下使用python的logging模塊實(shí)現(xiàn)日志的記錄遣臼。
logger的常見(jiàn)使用
1.日志等級(jí)
2.實(shí)際開(kāi)發(fā)中的日志記錄
3.日志輸出到屏幕
4.日志輸入到文件
5.完整代碼實(shí)例
日志的等級(jí):
1.等級(jí)排序:
?? debug < info < warn < error < fatal
2.各等級(jí)的含義:
??1.debug: 級(jí)別最低,用戶開(kāi)發(fā)過(guò)程中的調(diào)試
??2.info:打印程序運(yùn)行是的正常的信息场晶,用于替代print輸出
??3.warn: 打印警告信息混埠,不影響程序的運(yùn)行
??4.error: 程序運(yùn)行出錯(cuò),可以修復(fù)诗轻,常用在except異常捕獲之后
??5.fatal:非常嚴(yán)重钳宪,無(wú)法修復(fù),程序繼續(xù)運(yùn)行的話后果非常嚴(yán)重
3.使用注意事項(xiàng):
?? 設(shè)置了日志等級(jí)后扳炬,調(diào)用比等級(jí)低的日志記錄函數(shù)則不會(huì)輸出
實(shí)際開(kāi)發(fā)中的日志記錄
1.在開(kāi)發(fā)階段吏颖,便于調(diào)試,會(huì)將日志信息輸出到控制臺(tái)
2.項(xiàng)目上線后恨樟,便于后期的錯(cuò)誤定位半醉,會(huì)將日志記錄到log文件
日志輸出到屏幕
logging.StreamHandler()
日志輸入到文件
logging.handlers.TimedRotatingFileHandler(filename, when, backupCount, encoding)
各參數(shù)含義:
1.filename:log文件名
2.when:間隔的時(shí)間單位
S:秒
M:分
H:小時(shí)
D:天、
W:每星期(interval==0時(shí)代表星期一)
midnight: 每天凌晨
3.backupCount:備份文件的個(gè)數(shù)劝术,若超過(guò)該值缩多,就會(huì)自動(dòng)刪除
4.encoding:編碼格式,一般為:utf-8
完整代碼實(shí)例
# coding:utf-8
import os
import logging
from logging import handlers
# 日志根路徑
LOG_ROOT = "I:/"
def get_logger(log_filename, level=logging.DEBUG, when='midnight', back_count=0):
"""
:brief 日志記錄
:param log_filename: 日志名稱
:param level: 日志等級(jí)
:param when: 間隔時(shí)間:
S:秒
M:分
H:小時(shí)
D:天
W:每星期(interval==0時(shí)代表星期一)
midnight: 每天凌晨
:param back_count: 備份文件的個(gè)數(shù)养晋,若超過(guò)該值衬吆,就會(huì)自動(dòng)刪除
:return: logger
"""
logger = logging.getLogger(log_filename)
logger.setLevel(level)
log_path = os.path.join(LOG_ROOT, "logs")
if not os.path.exists(log_path):
os.mkdir(log_path)
log_file_path = os.path.join(log_path, log_filename)
# log輸出格式
formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 輸出到控制臺(tái)
ch = logging.StreamHandler()
ch.setLevel(level)
# 輸出到文件
fh = logging.handlers.TimedRotatingFileHandler(
filename=log_file_path,
when=when,
backupCount=back_count,
encoding='utf-8')
fh.setLevel(level)
# 設(shè)置日志輸出格式
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 添加到logger對(duì)象里
logger.addHandler(fh)
logger.addHandler(ch)
return logger
if __name__ == "__main__":
logger = get_logger("my.log")
logger.debug("debug test")
logger.info("info test")
logger.warn("warn test")
logger.error("error test")
喜歡關(guān)注點(diǎn)個(gè)贊!