python3 輸出日誌的正確開啟方式(二)

2021-10-09 15:31:41 字數 3490 閱讀 5646

使用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 返...