赞
踩
日志级别有5个级别,默认输出的是waring级别的,可以通过logging.basicConfig(level=logging.DEBUG)
对输出的级别进行设置
import logging
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG) # 配置日志级别
logging.debug('debug级别,一般用来打印一些调试信息,级别最低')
logging.info('info级别,一般用来打印一些正常的操作信息')
logging.warning('waring级别,一般用来打印警告信息')
logging.error('error级别,一般用来打印一些错误信息')
logging.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')
输出
DEBUG:root:debug级别,一般用来打印一些调试信息,级别最低
INFO:root:info级别,一般用来打印一些正常的操作信息
WARNING:root:waring级别,一般用来打印警告信息
ERROR:root:error级别,一般用来打印一些错误信息
CRITICAL:root:critical级别,一般用来打印一些致命的错误信息,等级最高
可以对输出的日志格式进行设置
import logging
if __name__ == '__main__':
logging.basicConfig(format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
level=logging.DEBUG) # 配置输出格式、配置日志级别
logging.debug('debug级别,一般用来打印一些调试信息,级别最低')
logging.info('info级别,一般用来打印一些正常的操作信息')
logging.warning('waring级别,一般用来打印警告信息')
logging.error('error级别,一般用来打印一些错误信息')
logging.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')
输出
2024-01-25 16:19:30,409 - 111.py[line:17] - DEBUG: debug级别,一般用来打印一些调试信息,级别最低
2024-01-25 16:19:30,410 - 111.py[line:18] - INFO: info级别,一般用来打印一些正常的操作信息
2024-01-25 16:19:30,410 - 111.py[line:19] - WARNING: waring级别,一般用来打印警告信息
2024-01-25 16:19:30,410 - 111.py[line:20] - ERROR: error级别,一般用来打印一些错误信息
2024-01-25 16:19:30,410 - 111.py[line:21] - CRITICAL: critical级别,一般用来打印一些致命的错误信息,等级最高
format的内置参数有
%(name)s:Logger的名字
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
输出日志到文件步骤:
1.创建日志器logging.getLogger()
2.设置日志级别
3.设置日志的格式
4.设置handler,handler的作用是将消息分别发送到指定的位置(如文件、控制台)
5.为logger增加handler,logger对象可以通过addHandler()为自己添加一个或多个handler,可以同时将日志输出到控制台、文件等,添加几种handler就会输出几种类型;
日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作
Handler | 描述 |
---|---|
logging.StreamHandler | 将日志消息发送到控制台 |
logging.FileHandler | 将日志消息发送到磁盘文件,默认情况下文件大小会无限增长 |
logging.handlers.RotatingFileHandler | 将日志消息发送到磁盘文件,并支持日志文件按大小切割 |
logging.hanlders.TimedRotatingFileHandler | 将日志消息发送到磁盘文件,并支持日志文件按时间切割 |
logging.handlers.HTTPHandler | 将日志消息以GET或POST的方式发送给一个HTTP服务器 |
logging.handlers.SMTPHandler | 将日志消息发送给一个指定的email地址 |
logging.NullHandler | 该Handler实例会忽略error messages |
import logging if __name__ == '__main__': #创建日志器 logger = logging.getLogger() # 设置日志级别 logger.setLevel(level=logging.DEBUG) # 设置日志格式 formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') # 设置文件处理器,指定保存到demo2.txt文件中 file_handler = logging.FileHandler('demo2.txt') # 设置文件处理器输出日志的级别 file_handler.setLevel(level=logging.INFO) # 设置文件处理器日志的格式 file_handler.setFormatter(formatter) # 设置控制台处理器 stream_handler = logging.StreamHandler() # 设置控制台处理器输出日志的级别 stream_handler.setLevel(logging.DEBUG) # 设置控制台处理器日志的格式 stream_handler.setFormatter(formatter) # 为logger对象增加一个 文件handle logger.addHandler(file_handler) # 为logger对象增加一个 控制台handle logger.addHandler(stream_handler) logger.debug('debug级别,一般用来打印一些调试信息,级别最低') logger.info('info级别,一般用来打印一些正常的操作信息') logger.warning('waring级别,一般用来打印警告信息') logger.error('error级别,一般用来打印一些错误信息') logger.critical('critical级别,一般用来打印一些致命的错误信息,等级最高')
在控制台和文件中都有输出日志信息
import logging def test_log2(): # 创建日志器 logger = logging.getLogger() # 设置日志级别 logger.setLevel(logging.INFO) # 设置格式 创建格式器 formatter = logging.Formatter('%(asctime)s %(filename)s %(funcName)s %(levelname)s %(message)s') # 日志信息显示在控制台 if not logger.handlers: # 设置handler,这里设置一个控制台handler sh = logging.StreamHandler() # 给控制台加格式 sh.setFormatter(formatter) # 日志信息放入控制台中 logger.addHandler(sh) # 设置handler,这里设置一个文件handler fh = logging.FileHandler('log1.txt', encoding='utf-8') # 给文件handler加格式 fh.setFormatter(formatter) # 把日志信息添加到文件中去 logger.addHandler(fh) return logger
创建一个base.py文件导入上面封装好的test_log2()
类,在需要日志的代码中加上 实例化类.info
或 实例化类.error
输出日志信息
import time from class06.demo02 import test_log2 from selenium import webdriver a = test_log2() class BasePage: def __init__(self, driver): self.driver = driver def open(self, txt): try: # 记录正常的日志 a.info(f'访问{txt}') self.driver.get(txt) except Exception as e: # 记录报错的日志 a.error('没有访问到网址') def locaotr(self, name, value): return self.driver.find_element(name, value) def on_input(self, name, value, txt): try: a.info(f'通过{name}{value}输入{txt}') self.locaotr(name, value).send_keys(txt) except Exception as e: a.error('输入错误了%s' % e) def on_click(self, name, value): a.info(f'通过{name}{value}进行了点击') self.locaotr(name, value).click() def wait(self): time.sleep(3) def close(self): self.driver.quit() if __name__ == '__main__': b = BasePage(webdriver.Chrome()) b.open('http://www.baidu.com') b.on_input('id', 'kw', '测试') b.wait() b.on_click('id', 'su') b.wait() b.close()
luckylog可以直接使用无需封装;
安装:pip install luckylog
from selenium import webdriver from luckylog.luckylog import * log_conf.path = './test.log' # 设置保存的日志路径 log_conf.module = ['success', 'error', 'tip', 'warning'] # 设置需要保存那些类型的日志 log_conf.error_file = './error.log' # 设置装饰器错误信息保存路径 log_conf.detail = False class BasePage: def __init__(self, driver): self.driver = driver @logger(passed='成功打开网址', fail='失败网址') def open(self, txt): self.driver.get(txt) def locaotr(self, name, value): return self.driver.find_element(name, value) @logger(passed='成功输入内容', fail='失败输入内容') def on_input(self, name, value, txt): self.locaotr(name, value).send_keys(txt) @logger(passed='成功点击', fail='失败点击') def on_click(self, name, value): self.locaotr(name, value).click() def wait(self): time.sleep(3) def close(self): self.driver.quit() if __name__ == '__main__': b = BasePage(webdriver.Chrome()) b.open('http://www.baidu.com') b.on_input('id', 'kw', '测试') b.wait() b.on_click('id', 'su') b.wait() b.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。