日志功能 - 使用 conf 配置文件
配置文件:Logger.conf
工具类:LogUtil.py
测试类:testDemo.py
执行效果
配置文件:Logger.conf
定义日志的类型、级别、格式等信息。
[loggers]
# 定义了三种写日志的方式:logger_root、logger_example01、logger_example02
keys=root,example01,example02
[logger_root]
# 日志的颗粒度级别:critical > error > warning > info > debug
level=DEBUG
# 日志设置:设定了日志的格式、位置、级别等信息
handlers=hand01,hand02
[logger_example01]
handlers=hand01,hand02
# 日志格式名字
qualname=example01
propagate=0
[logger_example02]
handlers=hand01,hand03
qualname=example02
propagate=0
###############################################
[handlers]
# 日志的设置:3种
keys=hand01,hand02,hand03
[handler_hand01]
# 流模式:打印到屏幕上(标准输出,标准错误输出)
class=StreamHandler
# 日志级别
level=DEBUG
# 日志的格式
formatter=form01
# 标准错误输出
args=(sys.stderr,)
[handler_hand02]
# 日志打印到文件
class=FileHandler
level=DEBUG
formatter=form01
# 设定日志文件位置,a表示追加打印
args=('e:\\AutoTestLog.log', 'a')
[handler_hand03]
# 回滚日志打印
class=handlers.RotatingFileHandler
level=INFO
formatter=form01
args=('e:\\AutoTestLog.log', 'a', 10*1024*1024, 5)
# 10*1024*1024:一个日志文件最大是10m,最多打印5个文件
# 打印超过50mb的日志信息,那么会把第一个日志文件做覆盖写
###############################################
[formatters]
keys=form01,form02
# form01格式,设定每一行日志的格式信息
[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] 【%(levelname)s】 %(message)s
# %(asctime):时间
# %(filename):当前执行的文件名
# %(lineno):当前执行代码行号
# %(levelname):日志的级别
# %(message):具体的日志信息
# 日期格式:年-月-日 时-分-秒
datefmt=%Y-%m-%d %H:%M:%S
[formatter_form02]
format=%(name)-12s: %(levelname)-8s %(message)s
datefmt=%Y-%m-%d %H:%M:%S
常用配置说明:
format: 指定输出的格式和内容,format 可以输出很多有用信息,如下所示:
- %(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: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
工具类:LogUtil.py
封装 4 种日志级别的函数。
1 import logging.config
2 import logging
3
4
5 # 写绝对路径和相对路径都可以
6 logging.config.fileConfig("Logger.conf")
7 logger = logging.getLogger("example01")
8
9 def debug(message):
10 # 打印debug级别的日志方法
11 logger.debug(message)
12
13 def warning(message):
14 # 打印warning级别的日志方法
15 logger.warning(message)
16
17 def info(message):
18 # 打印info级别的日志方法
19 logger.info(message)
20
21 def error(message):
22 # 打印error级别的日志方法
23 logger.error(message)
24
25
26 if __name__=="__main__":
27 debug("hi")
28 info("gloryroad")
29 warning("hello")
30 error("这是一个error日志")
测试类:testDemo.py
使用工具类进行测试。
1 from selenium import webdriver
2 from LogUtil import *
3
4
5 driver = webdriver.Chrome()
6 debug("============== 开始搜索测试 ==============")
7 url = "http://www.sogou.com"
8 debug("访问网址:http://www.sogou.com")
9 driver.get(url)
10 debug("定位搜索框")
11 driver.find_element_by_id("query").send_keys("hiphop")
12 info("在输入框中输入搜索关键字串“hiphop”" + driver.find_element_by_id("query").get_attribute("value"))
13 debug("单击搜索按钮")
14 driver.find_element_by_id("stb").click()
15 debug("关闭浏览器")
16 driver.quit()
17 debug("============== 搜索测试结束 ==============")
执行效果
屏幕及日志文件的打印内容:
2021-01-10 23:47:25 LogUtil.py[line:7] 【DEBUG】 ============== 开始搜索测试 ==============
2021-01-10 23:47:25 LogUtil.py[line:7] 【DEBUG】 访问网址:http://www.sogou.com
2021-01-10 23:47:27 LogUtil.py[line:7] 【DEBUG】 定位搜索框
2021-01-10 23:47:27 LogUtil.py[line:13] 【INFO】 在输入框中输入搜索关键字串“hiphop”hiphop
2021-01-10 23:47:27 LogUtil.py[line:7] 【DEBUG】 单击搜索按钮
2021-01-10 23:47:28 LogUtil.py[line:7] 【DEBUG】 关闭浏览器
2021-01-10 23:47:31 LogUtil.py[line:7] 【DEBUG】 ============== 搜索测试结束 ==============
遗留问题:文件名及行号仍然对应工具类。
日志功能 - 使用 conf 配置文件的更多相关文章
- Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件
Linux就这个范儿 第16章 谁都可以从头再来--从头开始编译一套Linux系统 nsswitch.conf配置文件 朋友们,今天我对你们说,在此时此刻,我们虽然遭受种种困难和挫折,我仍然有一个梦 ...
- jboss7访问日志功能及使用goaccess工具分析
网络上虽然很多文章分别讲到jboss7的访问日志如何配置,goaccess工具怎么分析nginx/tomcat等日志.但将两者放在一起即“通过goaccess分析jboss访问日志”的倒是没搜索到. ...
- php.ini与php-fpm.conf配置文件的区别
php-fpm.conf是PHP-FPM特有的配置文件 php.ini是所以php模式中必须的配置文件 两者的区别是,php-fpm.conf是PHP-FPM进程管理器的配置文件,php.ini是PH ...
- Nginx服务编译安装、日志功能、状态模块及访问认证模式实操
系统环境 [root@web ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@web ~]# uname -a Linux d ...
- Nginx(二)------nginx.conf 配置文件
上一篇博客我们将 nginx 安装在 /usr/local/nginx 目录下,其默认的配置文件都放在这个目录的 conf 目录下,而主配置文件 nginx.conf 也在其中,后续对 nginx 的 ...
- zabbix_server.conf、zabbix_agentd.conf配置文件详解
zabbix_server.conf配置文件详解 AlertScriptsPath 默认值:/usr/local/share/zabbix/alertscripts 说明:告警脚本目录 AllowRo ...
- php-fpm.conf配置文件中文说明详解及重要参数说明
摘自:https://www.jb51.net/article/148550.htm 感谢分享 php-fpm工作流程 php-fpm全名是PHP FastCGI进程管理器 php-fpm启动后会先读 ...
- Apache httpd.conf配置文件 2(Main server configuration)
### Section 2: 'Main' server configuration # # The directives in this section set up the values used ...
- nginx 日志功能详解
nginx 日志功能 在 nginx 中有两种日志: access_log:访问日志,通过访问日志可以获取用户的IP.请求处理的时间.浏览器信息等 error_log:错误日志,记录了访问出错的信息, ...
随机推荐
- 搭载华为麒麟9000的Mate X2:秒售罄,一机难求
本文首发 | 公众号:lunvey 昨日10点,搭载了麒麟9000芯片的华为Mate X2正式开售,定价17999,对于手机来说,价格实在是高昂. 虽然价格高昂,但是一分钱一分货,对于想抢先体验的网友 ...
- Vue项目的创建、路由、及生命周期钩子
目录 一.Vue项目搭建 1.环境搭建 2.项目的创建 3.pycharm配置并启动vue项目 4.vue项目目录结构分析 5.Vue根据配置重新构建依赖 二.Vue项目创建时发生了什么 三.项目初始 ...
- 顶级c程序员之路 基础篇 - 第一章 关键字的深度理解 number-1
c语言有32个关键字,每个关键字你都理解吗? 今天出场的是: auto , register, static, extern 为什么他们会一起呢,说到这里不得不谈到c语言对变量的描述. c给每 ...
- 使用gitlab构建基于docker的持续集成(一)
使用gitlab构建基于docker的持续集成(一) gitlab docker aspnetcore 持续集成 开篇 整体环境规划 准备工作 CA证书 虚拟机系统:安装Centos7.3 3.设置C ...
- 关于安装VMware以及Linux操作系统过程
想用Linux完成部分教学作业,虚拟机是少不了的,所以首先选择了VMware进行安装. VMware在官网下载之后,就可以直接打开安装,但是在安装过程中,建议不要勾选启动时检查产品更新和加入VMwar ...
- c++指针数组与二维数组的最大区别
下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...
- 剑指 Offer 32 - I. 从上到下打印二叉树 + 层次遍历二叉树
剑指 Offer 32 - I. 从上到下打印二叉树 Offer_32_1 题目描述 解题思路 这题属于简单题,考察的是我们对二叉树以及层次遍历的方法. 这里只需要使用简单的队列即可完成二叉树的层次遍 ...
- Gym100923H Por Costel and the Match
题目链接:http://codeforces.com/gym/100923/problem/H 分析:并查集,用enemy储存x的敌人,用weight储存权重决定根节点 需用scanf和puts输入输 ...
- Sentinel熔断降级
sentinel流量控制 Sentinel流量控制&服务熔断降级介绍 流量控制介绍 在这里我用景区的例子解释一下 一个旅游景点日接待游客数量为8K,8K以后的游客就无法买票进去景区. 对应编程 ...
- 怎么理解onStart可见但不可交互
前言 今天朋友遇到一个面试题,分享给大家: onStart生命周期表示Activity可见,那为什么不能交互呢? 这个问题看似简单,但涉及到的面还是比较多的,比如Activity生命周期的理解,进程的 ...