zoukankan      html  css  js  c++  java
  • 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中设置日志的格式以及级别,经尝试后,日志果然只发一遍了。

  • 相关阅读:
    MySQL数据库导入方法(最佳方案--cmd命令行方式导入,不会导致数据结构或表丢失)
    MySQL:互联网公司常用分库分表方案汇总!
    主流的消息中间件有哪些?
    Java实现进制之间转换的工具类
    python查找文件夹下所有指定后缀名的文件
    Visual Studio检查内存泄露方法
    Linux重要文件被删恢复问题
    docker 安装与相关操作
    C++ 替换路径中斜杠 并获取完整路径的文件名
    catch2:一个好用的C++单元测试框架
  • 原文地址:https://www.cnblogs.com/xupeizhi/p/2893337.html
Copyright © 2011-2022 走看看