Python的log模塊日志寫兩遍的問題


python中有專門的log模塊來寫日志,如下所示:

def initlog():

import logging

logger = logging.getLogger() # 生成一個日志對象

logfile = 'test.log' # logfile是一個全局變量,它就是一個文件名,如:'crawl.log'

hdlr = logging.FileHandler('sendlog.txt') # 生成一個Handler。logging支持許多Handler,象FileHandler, SocketHandler, SMTPHandler等,我由於要寫文件就使用了FileHandler。

formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') # 格式器,用於規范日志的輸出格式。如果沒有這行代碼,那么缺省的格式就是:"%(message)s"。也就是寫日志時,信息是什么日志中就是什么,沒有 日期,沒有信息級別等信息。logging支持許多種替換值,詳細請看Formatter的文檔說明。這里有三項:時間,信息級別,日志信息

hdlr.setFormatter(formatter) # 將格式器設置到處理器上

logger.addHandler(hdlr) # 將處理器加到日志對象上

logger.setLevel(logging.NOTSET)

return logger

# 設置日志信息輸出的級別。logging提供多種級別的日志信息,如:NOTSET,

# DEBUG, INFO, WARNING, ERROR, CRITICAL等。每個級別都對應一個數值。

# 如果不執行此句,缺省為30(WARNING)。可以執行:logging.getLevelName

# (logger.getEffectiveLevel())來查看缺省的日志級別。日志對象對於不同

# 的級別信息提供不同的函數進行輸出,如:info(), error(), debug()等。當

# 寫入日志時,小於指定級別的信息將被忽略。因此為了輸出想要的日志級別一定

# 要設置好此參數。這里我設為NOTSET(值為0),也就是想輸出所有信息

 

程序中調用:

logging=initlog()

logging.info("2011-08-08")

 

那么日志中會打出:

2011-08-19 00:02:57,073 INFO 2011-08-08

2011-08-19 00:02:57,073 INFO 2011-08-08

 

這樣使用后其他都正常,但是有一點很奇怪,每次日志都會打兩遍,但我程序中明明只調用了一次,后來經過查找可能是原因是為在程序中addHandler后沒有移除這個句柄,所以可以修改上述log程序:

 

def initlog():

import logging

logger = logging.getLogger()

hdlr=logging.basicConfig(filename='test.log',level=logging.NOTSET,format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

return logger

即在basicConfig中設置日志的格式以及級別,經嘗試后,日志果然只發一遍了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM