日誌的等級:
import logging
# 日誌的五個等級,等級依次遞增
# 預設是warning等級
logging.debug
logging.info
logging.warning
logging.error
logging.critical
# 設定日誌等級
logging.basicconfig(level=logging.info)
# 使用
logging.debug(
'debug'
)logging.info(
'info'
)logging.warning(
'warning'
)logging.error(
'error'
)logging.critical(
'critical'
)
捕獲異常資訊到日誌。這裡主要需要進行捕獲異常才能記錄下完整的異常資訊
try
:raise exception(
"異常"
)except exception as e:
logging.exception(e)
日誌的輸出格式 對於日誌的輸出格式,我們能夠進行自定義,包括輸出的內容格式和時間格式
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
-0816:
49:45,
896」。逗號後面的是毫秒
%(thread)d 執行緒id。可能沒有
%(threadname)s 執行緒名。可能沒有
%(process)d 程序id。可能沒有
%(message)s 使用者輸出的訊息
datefmt引數說明:
%y 兩位數的年份表示(00
-99)
%y 四位數的年份表示(000
-9999)
%m 月份(01
-12)
%d 月內中的一天(0
-31)
%h 24小時制小時數(0
-23)
%i 12小時制小時數(01
-12)
%m 分鐘數(00
=59)
%s 秒(00
-59)
%a 本地簡化星期名稱
%a 本地完整星期名稱
%b 本地簡化的月份名稱
%b 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001
-366)
%p 本地a.m.或p.m.的等價符
%u 一年中的星期數(00
-53)星期天為星期的開始
%w 星期(0
-6),星期天為星期的開始
%w 一年中的星期數(00
-53)星期一為星期的開始
%x 本地相應的日期表示
%x 本地相應的時間表示
%z 當前時區的名稱%%
%號本身
import sys
import logging
# 預設的配置
default_log_level = logging.info # 預設等級
default_log_fmt =
'%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s'
# 預設日誌格式
defualt_log_datefmt =
'%y-%m-%d %h:%m:%s'
# 預設時間格式
default_log_filename =
'log.log'
# 預設日誌檔名稱
class
logger
(object):
def__init__
(self)
:# 1. 獲取乙個logger物件
self._logger = logging.getlogger(
)# 2. 設定format物件
self.formatter = logging.formatter(fmt=default_log_fmt,datefmt=defualt_log_datefmt)
# 3. 設定日誌輸出
# 3.1 設定檔案日誌模式
self._logger.addhandler(self._get_file_handler(default_log_filename)
)# 3.2 設定終端日誌模式
self._logger.addhandler(self._get_console_handler())
# 4. 設定日誌等級
self._logger.setlevel(default_log_level)
def_get_file_handler
(self, filename)
:'''返回乙個檔案日誌handler'''
# 1. 獲取乙個檔案日誌handler
filehandler = logging.filehandler(filename=filename,encoding=
"utf-8"
)# 2. 設定日誌格式
filehandler.setformatter(self.formatter)
# 3. 返回
return filehandler
def_get_console_handler
(self)
:'''返回乙個輸出到終端日誌handler'''
# 1. 獲取乙個輸出到終端日誌handler
console_handler = logging.streamhandler(sys.stdout)
# 2. 設定日誌格式
console_handler.setformatter(self.formatter)
# 3. 返回handler
return console_handler
@property
deflogger
(self)
:return self._logger
# 初始化並配乙個logger物件,達到單例的
# 使用時,直接匯入logger就可以使用
logger = logger(
).logger
新增日誌 為ceph無日誌模組新增日誌
最近在分析ceph某個模組的時候,發現該模組沒有日誌輸出模組 也就是無法直接使用dout列印日誌 基於此整理了下怎麼樣可以正常使用日誌列印。話不多說,直接貼 好了。如下,在subsys.h中新增想新增的子模組 root fe4fcb2c09b7 tmp ceph luminous git diff ...
日誌模組 logging模組
logging.debug 通常除錯時用到的日誌資訊 logging.info 證明事情按照預期的那樣工作 longging.warning 表明發生了意外,或者不就得將來發生的問題 如 磁碟滿了 軟體還是正常的工作 longging.error 由於更嚴重的問題導致軟體已經不能繼續執行某些功能 l...
Nginx 熱部署及新增模組和日誌切割
當從老版本替換為新版本的 nginx 的時候,如果不熱部署的話,會需要取消 nginx 服務並重啟服務才能替換成功,這樣的話會使正在訪問的使用者在斷開連線,所以為了在不影響使用者的體驗下進行版本公升級,就需要熱部署來公升級版本。因為進行公升級主要是更換二進位制檔案,所以在公升級前先備份舊的二進位制檔...