zoukankan      html  css  js  c++  java
  • python中日志输出重复的解决办法

    #coding:utf-8
    import logging
    def log():
        #创建logger,如果参数为空则返回root logger
        logger = logging.getLogger()  #定义一个logger(日志器提供应用程序提供接口)
        logger.setLevel(logging.ERROR )  #设置logger日志等级
            
        # 判断logger是否已经添加过handler,是则直接返回logger对象,否则执行handler设定以及addHandler(ch)
        if not logger.handlers:
            #创建handler(日志处理器)将logger创建的日志按照自身定义的formatter格式输出到指定地方
            fh = logging.FileHandler("D:\workspace\thinksns\result\log\test.log",encoding="utf-8") #将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
            ch = logging.StreamHandler()  #将日志消息发送到输出到Stream,如std.out, std.err或任何file-like对象。     
            #设置输出日志格式
            formatter = logging.Formatter(
            fmt="%(asctime)s %(levelname)s %(filename)s%(funcName)s %(message)s",  #指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
            datefmt="%Y/%m/%d %X"  #指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"
                        
                      )
                     
            #将formatter定义的格式加载到handler
            fh.setFormatter(formatter)
            ch.setFormatter(formatter)
                      
            #为logger添加的日志处理器,
            logger.addHandler(fh)
            logger.addHandler(ch)
                  
        return logger

    如果去掉if not logger.handlers:语句,我们日志将会重复输出2次,所以在日志使用前,加以判断有就直接返回logger,没有就创建后返回

    墨者看遍天下皆是丹青,测试看尽万物皆是bug
  • 相关阅读:
    装饰器
    异常处理与断言
    例子:对象构造函数指定类型传入参数(描述符与装饰器的应用)
    Python的描述符
    全新开始fighting
    函数相关知识
    集合的介绍以及简单方法
    列表,元组,字典类的常见简单方法
    Python简单字符串函数介绍
    聚合函数及分组查询及F&Q
  • 原文地址:https://www.cnblogs.com/striver-dl/p/14086235.html
Copyright © 2011-2022 走看看