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