前言:
在實(shí)際的項(xiàng)目開發(fā)過程中,為了準(zhǔn)確的定位出bug,需要對錯(cuò)誤進(jìn)行日志記錄,這里簡要記錄一下使用python的logging模塊實(shí)現(xiàn)日志的記錄。
logger的常見使用
1.日志等級
2.實(shí)際開發(fā)中的日志記錄
3.日志輸出到屏幕
4.日志輸入到文件
5.完整代碼實(shí)例
日志的等級:
1.等級排序:
?? debug < info < warn < error < fatal
2.各等級的含義:
??1.debug: 級別最低,用戶開發(fā)過程中的調(diào)試
??2.info:打印程序運(yùn)行是的正常的信息,用于替代print輸出
??3.warn: 打印警告信息,不影響程序的運(yùn)行
??4.error: 程序運(yùn)行出錯(cuò),可以修復(fù),常用在except異常捕獲之后
??5.fatal:非常嚴(yán)重,無法修復(fù),程序繼續(xù)運(yùn)行的話后果非常嚴(yán)重
3.使用注意事項(xiàng):
?? 設(shè)置了日志等級后,調(diào)用比等級低的日志記錄函數(shù)則不會輸出
實(shí)際開發(fā)中的日志記錄
1.在開發(fā)階段,便于調(diào)試,會將日志信息輸出到控制臺
2.項(xiàng)目上線后,便于后期的錯(cuò)誤定位,會將日志記錄到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ù),若超過該值,就會自動刪除
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: 日志等級
:param when: 間隔時(shí)間:
S:秒
M:分
H:小時(shí)
D:天
W:每星期(interval==0時(shí)代表星期一)
midnight: 每天凌晨
:param back_count: 備份文件的個(gè)數(shù),若超過該值,就會自動刪除
: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')
# 輸出到控制臺
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對象里
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è)贊!