一文搞定python的日誌自定義

2021-09-01 18:29:37 字數 2438 閱讀 4859

在開發過程中,日誌是乙個避不開的話題,有的時候我們不需要控制台輸出過多的資訊,甚至不輸出,當然,我們可以在控制台設定日誌的等級來達到目的,但是,日誌的儲存,日誌格式的重寫,這些,就必須用python內建的logging模組來實現了。

命名為logge.py,**如下

import os

import time

import logging

#返回乙個logger例項,如果沒有指定name,返回root logger。

# 只要name相同,返回的logger例項都是同乙個而且只有乙個,即name和logger例項是一一對應的。

# 這意味著,無需把logger例項在各個模組中傳遞。只要知道name,就能得到同乙個logger例項。

logger = logging.getlogger('mylogger')

# 設定總日誌級別, 也可以給不同的handler設定不同的日誌級別

#設定logger的level, level有以下幾個級別:

# 級別高低順序:notset < debug < info < warning < error < critical

# 如果把looger的級別設定為info, 那麼小於info級別的日誌都不輸出, 大於等於info級別的日誌都輸出 

logger.setlevel(logging.debug)

# 控制台日誌和日誌檔案使用同乙個formatter,formatter用於描述日誌的格式

formatter = logging.formatter(

'%(asctime)s - %(filename)s[line:%(lineno)d] - ' +

'- - %(levelname)s: %(message)s'

)# asctime:日誌產生的時間;filename:產生日誌的指令碼檔名;lineno:該指令碼檔案哪一行**產生了日誌

# threadname: 當前執行緒名;thread: 當前程序名;process程序同thread執行緒

# levelname: logger的級別;meesage: 具體的日誌資訊

# 建立handler, 輸出日誌到控制台和檔案

# 日誌檔案filehandler

basedir = os.path.abspath(".") #返回指令碼所在的絕對路徑

log_dir = os.path.join(basedir, 'logs') # 日誌檔案所在目錄,即『指令碼路徑/logs'

if not os.path.isdir(log_dir):

os.mkdir(log_dir)

filename = time.strftime('%y-%m-%d-%h-%m-%s', time.localtime(time.time())) + '.log' # 日誌檔名,以當前時間命名

file_handler = logging.filehandler(os.path.join(log_dir, filename)) # 建立日誌檔案handler

file_handler.setformatter(formatter) # 設定formatter

file_handler.setlevel(logging.info) # 單獨設定日誌檔案的日誌級別

# 控制台日誌streamhandler

stream_handler = logging.streamhandler()

stream_handler.setformatter(formatter)

# stream_handler.setlevel(logging.info) # 單獨設定控制台日誌的日誌級別,注釋掉則使用總日誌級別

# 將handler新增到logger中

logger.addhandler(file_handler)

logger.addhandler(stream_handler)

假如我們在test.py需要用到儲存日誌,可以這樣:

from logger import logger

#從logger.py檔案裡匯入logger變數

for i in range(5):

logger.info("這是第"+str(i+1)+"條日誌")

#logger.debug("")

#logger.error("")

控制台列印如下:

…/logs資料夾下也產生了日誌檔案2018-11-24-19-14-05.log,其內容如下

一文搞定聯合索引

聯合索引 上文講解了索引的底層結構,但是留了乙個尾巴,就是沒有去講復合索引。今天來繼續梳理復合索引,所謂復合索引即是由多個字段組成的一條索引。例如下表 create table test id int 4 notnull auto increment a varchar 10 not null b ...

一文搞定babel轉換

code轉換為ast 遍歷ast樹 進行修改 還原為code targets支援哪些瀏覽器 babel polyfill是將整個es2015 環境引入到全域性中,會造成全域性汙染require core js modules set 改變了原型,所以可以在例項上使用方法 通過配置usebuiltin...

一文搞定開發學習環境

剛開始學寫 首先要搭建開發環境。新手需要在網上查閱教程,很多時候會遇到各種問題,甚至導致自己的學習進度卡住,學習熱情也因此而減少,這實在是個讓人煩的事情。我們可以簡單分析原因,並慢慢減少此類問題的發生。搭建開發環境經常出錯的原因 1.開發環境不匹配 我們在學習或者實際的開發中,有多種開發平台,比如w...