在開發過程中,日誌是乙個避不開的話題,有的時候我們不需要控制台輸出過多的資訊,甚至不輸出,當然,我們可以在控制台設定日誌的等級來達到目的,但是,日誌的儲存,日誌格式的重寫,這些,就必須用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...