python-logging

示例:
# 重写logging模块
import logging
import os
from logging.handlers import TimedRotatingFileHandler


class Logger:

    file_name = 'test.log'
    backup = 5
    console_out_level = 'WARNING'
    file_out_level = 'DEBUG'
    fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s:%(message)s")
    log_path = "D:\project\learn\log"

    def __init__(self, logger_name='framework'):
        self.logger = logging.getLogger(logger_name)
        logging.root.setLevel(logging.NOTSET)

    def get_logger(self):
        if not self.logger.handlers:
            console_handle = logging.StreamHandler()
            console_handle.setFormatter(self.fmt)
            console_handle.setLevel(self.console_out_level)
            self.logger.addHandler(console_handle)

            file_handle = TimedRotatingFileHandler(
                filename=os.path.join(
                    self.log_path,
                    self.file_name),
                when='D',
                interval=1,
                backupCount=self.backup,
                delay=True,
                encoding='utf-8')
            file_handle.setFormatter(self.fmt)
            file_handle.setLevel(self.file_out_level)
            self.logger.addHandler(file_handle)
        return self.logger

    def debug(self, msg):
        self.logger.debug(msg)

    def info(self, msg):
        self.logger.info(msg)

    def warning(self, msg):
        self.logger.warning(msg)

    def error(self, msg):
        self.logger.error(msg)
# 测试logging
from log import Logger


class log_test:

    def __init__(self):
        log = Logger()
        self.logger = log.get_logger()

    def test(self):

        self.logger.debug("This is a debug message")
        self.logger.info("This is a info message")
        self.logger.warning("This is warning message")
        self.logger.error("This is a error message")


if __name__ == "__main__":
    test = log_test()
    test.test()

重建日志文件:
  • TimedRotatingFileHandler-- 根据时间重建日志文件
TimedRotatingFileHandler(filename, when, interval, backup, encoding)
	filename:日志文件名称
	when:时间单位,其中S-Seconds/ M-Minutes/ H-Hours/ D-Days/ W-Week day/ midnight-Roll over at midnight
	interval:周期,每个少个时间单位,重建日志文件
	backup: 备份文件,当前目录保存日志文件个数,默认为0,不进行判断
	encoding:设置日志文件编码格式,可以忽略
  • RotatingFileHandler--基于文件大小切换日志文件
RotatingFileHandler(filename, maxBytes, backupCount):
	filename: 日志文件名称
	maxBytes: 日志大小
	backupCount:备份文件,当前目录保存日志文件个数,默认为0,不进行判断

日志格式:

file_handle.setFormatter(self.fmt)
日志格式:
	%(asctime)s:记录日志产生时间,默认为:'2018-05-03 20:12:22, 122'
	%(created)f:记录产生时间,通过time.time()获取
	%(filename)s:路径中文件名称
	%(funcName)s:调用log的函数名
	%(levelname)s:调用日志级别
	%(levelno)d:日志产生的行数
	%(module)s:模块名
	%(msecs)d:毫秒,对应asctime的最后一个值
	%(name)s:logger本身的名字
	%(pathname)s:调用源logger文件的完整路径
	%(processName)s:进程名
	%(process)d:进程ID
	%(thread)d:线程ID
	%(threadName)s:线程名称

猜你喜欢

转载自blog.csdn.net/freezing12/article/details/80183144
今日推荐