如果是按照從網上找的例子來寫log 的話,只要重復運行,就會出現第一次log記錄一條日志,第二次log記錄2條同樣的日志,第三次記錄3條同樣的日志以此類推~~~
例如log.py中內容
在dos下運行>log.py
到當前文件(log.py)的目錄下找kws30.log,即可發現問題.
log.py解決了問題.關鍵語句是:
log.py中每次logging寫日志之后,未調用用logger.removeHandler( hdlr )語句.
#log.py
def initlog():
import logging
logger = None
logger = logging.getLogger()
hdlr = logging.FileHandler("kws30.log")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.NOTSET)
return [logger,hdlr]
def logMsg( fun_name, err_msg,level ):
message = fun_name + ':'+err_msg
logger,hdlr = initlog()
logger.log(level ,message )
hdlr.flush()
#logger.removeHandler( hdlr )網絡上的實現基本為說明這條語句的使用和作用
if ( __name__ == "__main__"):
for k in ["fun1","fun2","fun3"]:
logMsg( "main",k, 1 )
print "1111"
測試:
#logger.removeHandler( hdlr )網絡上的實現基本為說明這條語句的使用和作用
使用這條語句和注釋掉這條語句的區別
使用~~~:情況下.log下是
2008-04-18 11:00:47,328 Level 1 main:fun1
2008-04-18 11:00:47,328 Level 1 main:fun2
2008-04-18 11:00:47,328 Level 1 main:fun3
注釋掉的情況:
2008-04-18 11:01:24,296 Level 1 main:fun1
2008-04-18 11:01:24,296 Level 1 main:fun2
2008-04-18 11:01:24,296 Level 1 main:fun2
2008-04-18 11:01:24,296 Level 1 main:fun3
2008-04-18 11:01:24,296 Level 1 main:fun3
2008-04-18 11:01:24,296 Level 1 main:fun3