使用logging.config.fileconfig(),讀取配置檔案的方式,雖然提供了靈活方便的渠道,僅僅可以通過修改配置即可達到目的,但是對於需要自定義日誌的同學顯然滿足不了要求。
且看自定義日誌該如何寫作,以下**實現了根據不同模組,建立相應目錄,日誌檔案的功能,日誌檔案命名為:模組_日誌.log。
廢話少說,直接上**,注意:以下log模組內容提供了兩種日誌輸出形式,一是輸出到控制台終端,二是輸出到日誌檔案。
日誌檔案實現了按月定期刪除,刪除乙個月前的日誌。
import logging
import logging.handlers
import os
import datetime
log_path_base="/log/"
class log():
def __init__(self, module_name="test",log_level=logging.debug):
self.__module_name = module_name
self.__log_level = log_level
#output log to console
def get_console_logger(self):
def _gen_file_logger_handler():
_handler = logging.streamhandler()
formatter = logging.formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d][%(levelname)s]: %(message)s", datefmt="%y-%m-%d %h:%m:%s")
_handler.setlevel(logging.debug)
_handler.setformatter(formatter)
return _handler
def _gen_console_logger():
_console_logger = logging.getlogger("console_logger")
_console_logger.addhandler(handler)
return _console_logger
handler = _gen_file_logger_handler()
console_logger = _gen_console_logger()
return console_logger
#output log to module log file
def get_file_logger(self):
#def _get_log_file_name():
# if __name__ == "__main__":
caller_log_name = default_logname
else:
nowtime = datetime.datetime.now().strftime('%y-%m-%d')
caller_log_name = self.__module_name + "_" + nowtime + ".log"
return caller_log_name
#def _gen_file_logger_handler(log_name = default_logname):
log_file_dir = log_path_base + self.__module_name
if not os.path.isdir(log_file_dir):
os.makedirs(log_file_dir)
file_path = f'/'
formatter = logging.formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d][%(levelname)s]: %(message)s", datefmt="%y-%m-%d %h:%m:%s")
_handler = logging.handlers.timedrotatingfilehandler(
filename=file_path,
when='d',
interval=1,
backupcount=31,
encoding='utf-8',
)_handler.setlevel(self.__log_level)
_handler.setformatter(formatter)
_handler.suffix = "%y-%m-%d.log"
_handler.extmatch = re.compile(r"^\d-\d-\d.log$")
return _handler
#def _gen_file_logger():
_file_logger = logging.getlogger(self.__module_name)
_file_logger.addhandler(handler)
_file_logger.setlevel(self.__log_level)
return _file_logger
log_file_name = _get_log_file_name()
handler = _gen_file_logger_handler(log_file_name)
file_logger = _gen_file_logger()
return file_logger
if __name__ == "__main__":
#args is module name
logger = log("test").get_file_logger()
logger.debug('print by debug')
logger.info('print by info')
logger.warning('print by warning')
logger.error("print by error")
logger.critical("print by critical")
建立test_log.py
Python3的日誌新增功能
python日誌新增功能,主要記錄程式執行中的日誌,統一收集並分析 一 日誌的級別 debug 除錯資訊 info warning 警告資訊 error 錯誤資訊 critical 致命資訊 從左往右越來越嚴重日誌等級 level 描述debug 最詳細的日誌資訊,典型應用場景是 問題診斷 info...
python3輸入輸出
模 式 描 述 r以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式。rb以二進位制格式開啟乙個檔案用於唯讀。檔案指標將會放在檔案的開頭。這是預設模式。r 開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。rb 以二進位制格式開啟乙個檔案用於讀寫。檔案指標將會放在檔案的開頭。w開啟乙個檔...
python3的輸出輸入檔案OS
檔案 資料持久化最簡單的型別,也叫平面檔案 flat file 它僅僅是乙個檔名下的位元組流,把資料從乙個檔案讀入記憶體,然後從記憶體寫入檔案。讀乙個檔案之前需要開啟它,之後可以呼叫函式來讀寫資料,最後需要關閉檔案。fileobj open filename,mode fileobj 是open 返...