日志格式

近期研究日志模块时,发现输出的log不是自己想要的格式,研究了下,特意整理出四种风格,参考如下:

以下log背景:run_test.py执行脚本中,调用log方法:mylogger.info("Auto-Survey-test start...")

样式1:Tue 31 Mar 2020 09:02:44 - INFO run_test.py [line:96] Auto-Survey-test start...

# 定义handler的输出格式`
fmt = "%(asctime)s - %(levelname)s %(filename)s [line:%(lineno)d] %(message)s"
datefmt = "%a %d %b %Y %H:%M:%S"
formatter = logging.Formatter(fmt, datefmt)
fh.setFormatter(formatter)
ch.setFormatter(formatter) 

样式2:2020-03-31 09:12:13,736 - INFO run_test.py [line:96]: Auto-Survey-test start...

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s %(filename)s [line:%(lineno)d]: %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

样式3:2020-03-31 08:58:49,059 - Survey-Log - INFO - Auto-Survey-test start...

注:此处的Survey-Log为Logger类下mylogger实例中logger参数值

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

样式4:2020-03-31 09:09:43,107 - D:/Program Files/PycharmProjects/BDP-SURVEY-AT/run_test.py[line:96] - INFO: Auto-Survey-test start...

# 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)

日志模块参考代码如下:

# logging模块支持我们自定义封装一个新日志类
import logging
import os.path
import time
from logging.handlers import RotatingFileHandler
from Common.Config import Logs_PATH

class Logger(object):

    def __init__(self, logger):
        """
        指定保存日志的文件路径,日志级别,调用文件
        将日志存入到指定的文件中
        :param logger:
        """
        # 创建一个logger(记录器)
        # 日志记录的工作主要由Logger对象来完成。在调用getLogger时要提供Logger的名称(注:多次使用相同名称 来调用getLogger,返回的是同一个对象的引用。)
        self.logger = logging.getLogger(logger)
        self.logger.setLevel(logging.DEBUG)

        # 创建一个handler,用于写入日志文件
        rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
        log_path = os.path.dirname(os.getcwd()) + '/logs/'
        log_name = log_path + 'auto-test_' + rq + '.log'  # 文件名

        # 将日志写入磁盘
        # fh = logging.FileHandler(log_name)
        fh = RotatingFileHandler(log_name, maxBytes=10 * 1024 * 1024, backupCount=5, encoding='utf-8')
        fh.setLevel(logging.INFO)

        # 创建一个handler,用于输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.INFO)

        # 定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s - %(levelname)s %(filename)s [line:%(lineno)d]: %(message)s')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)


        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

    def getlog(self):
        return self.logger

mylogger = Logger(logger='Survey-Log').getlog()


日志模块代码参考链接:

https://blog.csdn.net/wuyoudeyuer/article/details/102609657

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐