python:logging注意事項(小心重復記錄相同的日志).<----removeHandler


如果是按照從網上找的例子來寫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


免責聲明!

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



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