import logging
from logging.handlers import TimedRotatingFileHandler
class Logger(object):
def __init__(self):
# 创建logger对象
self.logger=logging.getLogger()#logging.getLogger(name)函数中的name是日志记录的用例名,不指定name会返回root对象
self.logger.setLevel(logging.DEBUG)
# logging.root.setLevel(logging.NOTSET) #NOTSET会显示所有输出
self.log_file_name="E:/PyCharmWorkSpace/AutoInterfaceTest/log/testlog.log"
self.backup_count=5
self.console_output_level="INFO"
self.file_output_level="DEBUG"
self.formatter=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")
def get_logger(self):
#handler对象:日志对象用于输出日志,而Handler对象用于指定日志向哪里输出(文件、终端等等)
# 常用handler对象:
# 1.StreamHandler, 用于向标准输入输出流等输出日志 2.FileHandler,用于向文件输出日志
# 3.NullHandler,什么也不输出 4.RotatingFileHandler,向文件输出日志,如果文件到达指定大小,创建新文件并继续输出日志。
# 控制台日志
console_handler = logging.StreamHandler()
console_handler.setFormatter(self.formatter)
console_handler.setLevel(self.console_output_level)
self.logger.addHandler(console_handler) #将控制台日志对象添加到logger
# 文件日志
# 每天重新创建一个日志文件,最多保留backup_count份
file_handler = TimedRotatingFileHandler(filename=self.log_file_name,
when='D',
interval=1,
backupCount=self.backup_count,
delay=True,
encoding='utf-8')
file_handler.setFormatter(self.formatter)
file_handler.setLevel(self.file_output_level)
self.logger.addHandler(file_handler)#将文件日志对象添加到logger
return self.logger
if __name__ == '__main__':
log=Logger().get_logger()
# 打印优先级:critical>error>warning>info>debug
# 当等级为debug时,全部等级都能够打印出来,等级为info时,除了debug,其他都能够打印
log.debug("debug信息,最低级别,一般开发人员用来打印一些调试信息")
log.info("info信息,正常输出信息,一般用来打印一些正常的操作")
log.warning("warning,一般用来打印警信息,默认等级为warning")
log.error("error信息,一般用来打印一些错误信息")
log.critical("critical信息,一般用来打印一些致命的错误信息,等级最高")
logger=Logger().get_logger()