Logging日誌模組的使用

2022-06-28 09:21:11 字數 3748 閱讀 1695

debug          詳細資訊,典型地除錯問題時會感興趣。

info 證明事情按預期工作。

warning 表明發生了一些意外,或者不久的將來會發生問題(如『磁碟滿了』)。軟體還是在正常工作。

error 由於更嚴重的問題,軟體已不能執行一些功能了。

critical 嚴重錯誤,表明軟體已不能繼續執行了。

logging.basicconfig()函式中可通過具體引數來更改logging模組預設行為,可用引數有:

filename:用指定的檔名建立filedhandler,這樣日誌會被儲存在指定的檔案中。

filemode:檔案開啟方式,在指定了filename時使用這個引數,預設值為「a」還可指定為「w」。

format:指定handler使用的日誌顯示格式。

datefmt:指定日期時間格式。

level:設定rootlogger(後邊會講解具體概念)的日誌級別

stream:用指定的stream建立streamhandler。可以指定輸出到sys.stderr,sys.stdout或者檔案(f=open(『test.log』,』w』)),預設為sys.stderr。若同時列出了filename和stream兩個引數,則stream引數會被忽略。

format引數中可能用到的格式化串:

%(name)s logger的名字

%(levelno)s 數字形式的日誌級別

%(levelname)s 文字形式的日誌級別

%(pathname)s 呼叫日誌輸出函式的模組的完整路徑名,可能沒有

%(filename)s 呼叫日誌輸出函式的模組的檔名

%(module)s 呼叫日誌輸出函式的模組名

%(funcname)s 呼叫日誌輸出函式的函式名

%(lineno)d 呼叫日誌輸出函式的語句所在的**行

%(created)f 當前時間,用unix標準的表示時間的浮 點數表示

%(relativecreated)d 輸出日誌資訊時的,自logger建立以 來的毫秒數

%(asctime)s 字串形式的當前時間。預設格式是 「2003-07-08 16:49:45,896」。逗號後面的是毫秒

%(thread)d 執行緒id。可能沒有

%(threadname)s 執行緒名。可能沒有

%(process)d 程序id。可能沒有

%(message)s使用者輸出的訊息

配置引數

配置單個輸出

import

logging

formatter = '

%(asctime)s -- %(filename)s[line:%(lineno)d] -- %(levelname)s -- %(message)s

'datefmt = '

%y-%m-%d %h:%m:%s

'logging.basicconfig(level=logging.debug, #

輸出的等級

format=formatter, #

輸出的格式

datefmt=datefmt, #

輸出的時間格式(上面的輸出格式包含有輸出時間)

#filename='/tmp/test.log', # 寫入檔案的路徑

#filemode='a' # 寫入的格式 a是追加

)logging.debug(

'debug message')

logging.info(

'info message')

logging.warning(

'warning message')

logging.error(

'error message')

logging.critical(

'critical message

')

配置兩個輸出

import

logging

formatter = '

%(asctime)s -- %(filename)s[line:%(lineno)d] -- %(levelname)s -- %(message)s

'datefmt = '

%y-%m-%d %h:%m:%s

'def get_logger(file_path='

logging_debug.log

', mode='

a', file_level=logging.warning, std_level=logging.debug):

"""將日誌檔案輸出到檔案與std終端

:param file_path:

:param mode: 預設a為追加寫入

:param file_level: 預設:waring level

:param std_level: 預設:debug level

:return:

"""#

1. 例項化log物件

_logger = logging.getlogger(__name__

) _logger.setlevel(logging.debug)

#這個必須得設定,否則logger將使用root的日誌記錄級別

#2. 建立handler

file_handler = logging.filehandler(file_path, encoding='

utf-8

', mode=mode) #

用於寫入日誌檔案

std_handler = logging.streamhandler() #

用於輸出到控制台

#3. 給handler設定輸出的等級

file_handler.setlevel(file_level)

std_handler.setlevel(std_level)

#4. 設定格式, 格式可以使用不同的。

file_formatter = logging.formatter(formatter, datefmt=datefmt)

std_formatter = logging.formatter(formatter, datefmt=datefmt)

#5. 給handler繫結格式

file_handler.setformatter(file_formatter) #

寫入日誌檔案的格式

std_handler.setformatter(std_formatter) #

輸出控制台的格式

#6. 給例項logger繫結handler

_logger.addhandler(file_handler)

_logger.addhandler(std_handler)

return

_logger

if__name__ == '

__main__':

logger =get_logger()

#7. 使用

logger.debug('

debug message')

logger.info(

'info message')

logger.warning(

'warning message')

logger.error(

'error message')

logger.critical(

'critical message

')

日誌模組 logging模組

logging.debug 通常除錯時用到的日誌資訊 logging.info 證明事情按照預期的那樣工作 longging.warning 表明發生了意外,或者不就得將來發生的問題 如 磁碟滿了 軟體還是正常的工作 longging.error 由於更嚴重的問題導致軟體已經不能繼續執行某些功能 l...

python日誌模組logging的使用

乙個日誌函式,直接loggerfunc info 字串 直接呼叫即可 def loggerfunc pathname log test.log logname i am a log 自定義日誌函式 param pathname 日誌檔案存放的路徑,基於呼叫此函式的檔案 param filename ...

logging日誌模組

日誌級別日誌輸出 將日誌輸出到控制台 log1.py 如下 import logging logging.basicconfig level logging.warning,format asctime s filename s line lineno d levelname s message s...