python-Logging,输出到屏幕,将log日志写入文件

step1:logging、Logger初始化。logging定义日志等级

step2:设置日志格式 logging.formatter()。常用的有:

%(name)s

Logger的名字

%(levelno)s

数字形式的日志级别

%(levelname)s

文本形式的日志级别

%(pathname)s

调用日志输出函数的模块的完整路径名,可能没有

%(filename)s

调用日志输出函数的模块的文件名

%(module)s

调用日志输出函数的模块名

%(funcName)s

调用日志输出函数的函数名

%(lineno)d

调用日志输出函数的语句所在的代码行

%(created)f

当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d

输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d

线程ID。可能没有

%(threadName)s

线程名。可能没有

%(process)d

进程ID。可能没有

%(message)s

用户输出的消息

 step3:handlers初始化及使用【handler决定日志输出位置】,本例中使用的是按天写入:

logging.StreamHandler->控制台输出

logging.FileHandler -> 文件输出

logging.handlers.RotatingHandler ->按大小自动分割日志文件,一旦达到指定大小,重新生成文件

logging.handlers.TimeRotatingFileHandler -> 按时间自动分割日志文件

step4:handlers中加入日志等级、日志格式 。

step5:Logger中加入handler

step6:以test_log.py作为log配置的单独模块,需要在项目启动一开始就实例化日志类。实例化后就可以直接使用。

   def cfg_logging(self, log_level=logging.INFO):
        current = self.path
        # logging初始化工作,将信息打印到控制台。以level判定打印的信息等级。debug<info<warning<error<critical。默认为warning
        logging.basicConfig(level=log_level)
        # logger初始化工作
        logger = logging.getLogger()

        if len(logger.handlers) > 1:
            return
        #设置格式
        formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(threadName)s] %(message)s')

        error_info_handler = logger.handlers[0]
        error_info_handler.setFormatter(formatter)
        error_info_handler.setLevel(log_level)

        #滚动文件输出,按大小自动分割日志文件
        # file_handler = RotatingFileHandler(filename='{0}/TestLog_{1}.log'.format(current,
        #     datetime.datetime.now().strftime('%Y-%m-%d')), maxBytes=10*1024*1024, backupCount=5)
        file_handler = TimedRotatingFileHandler(filename='{0}/TestLog_{1}.log'.format(current,
             datetime.datetime.now().strftime('%Y-%m-%d')),when='D',backupCount=7,encoding='utf-8')
        #记录器Logger的级别决定了消息是否要传递给处理器handler。每个处理器的级别决定消息是否要分发
        file_handler.setLevel(log_level)
        file_handler.setFormatter(formatter)

        #设置log后缀名称
        logger.addHandler(file_handler)

 参考:https://www.cnblogs.com/nancyzhu/p/8551506.html

猜你喜欢

转载自blog.csdn.net/qq_24166417/article/details/106689498