摘要:用于便捷记录日志且线程安全的模块日志级别日志一共分成个等级,从低到高分别是。详细的信息通常只出现在诊断问题上确认一切按预期运行一个迹象表明一些意想不到的事情发生了或表明一些问题在不久的将来例如。这个等级,也分别对应种打日志的方法。
用于便捷记录日志且线程安全的模块 1、日志级别
日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL。2、日志输出DEBUG:详细的信息,通常只出现在诊断问题上
INFO:确认一切按预期运行
WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
ERROR:更严重的问题,软件没能执行一些功能
CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行。
这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。
默认的是WARNING,当在WARNING或之上时才被跟踪。
有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件。3、注意问题
用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条记录写两次,第三条记录写三次。。。这样记日志可不行。使用方法 1、单日志文件
原因:没有移除handler
解决:在日志记录完之后removeHandler
创建一个日志模块.py的文件
import logging logging.basicConfig(filename="log.log", format="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S %p", level=10) logging.debug("debug") logging.info("info") logging.warning("warning") logging.error("error") logging.critical("critical") logging.log(10,"log")
运行:
从运行结果来看,创建了一个log.log日志文件,时间是自动生产的,module是我们当前的python代码文件名。
日志等级:
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
注:只有【当前写等级】大于【日志等级】时,日志文件才被记录。
日志记录格式:
%(name)s Logger的名字 %(levelno)s 数字形式的日志级别 %(levelname)s 文本形式的日志级别 %(pathname)s 调用日志输出函数的模块的完整路径名 %(filename)s 调用日志输出函数的模块的文件名 %(module)s 调用日志输出函数的模块名 %(funcName)s 调用日志输出函数的函数名 %(lineno)d 调用日志输出函数的语句所在的代码行 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 %(thread)d 线程ID。 %(threadName)s 线程名。 %(process)d 进程ID。 %(message)s 用户输出的消息2、多文件日志
对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。
import logging # 定义文件 file1 = logging.FileHandler(filename="l1.log", mode="a", encoding="utf-8") fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S") file1.setFormatter(fmt) file2 = logging.FileHandler(filename="l2.log", mode="a", encoding="utf-8") fmt = logging.Formatter() file2.setFormatter(fmt) # 定义日志 logger1 = logging.Logger(name="这里是name", level=logging.ERROR) logger1.addHandler(file1) logger1.addHandler(file2) # logger1.removeHandler(file1) # logger1.removeHandler(file2) # 写日志 logger1.error(msg="这里是msg111") logger1.log(msg="这里是msg222", level=50) # 定义文件 file3 = logging.FileHandler(filename="l3.log", mode="a", encoding="utf-8") fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s", datefmt="%Y-%m-%d %H:%M:%S") file3.setFormatter(fmt) # 定义日志 logger2 = logging.Logger(name="这里是name222222", level=logging.INFO) logger2.addHandler(file3) # 写日志 logger2.info("这里是msg333333")
运行:
如上述创建的两个日志对象
当使用【logger1】写日志时,会将相应的内容写入 l1.log 和 l2.log 文件中
当使用【logger2】写日志时,会将相应的内容写入 l3.log 文件中
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41635.html
摘要:一什么是是一个基于浏览器的自动化工具,她提供了一种跨平台跨浏览器的端到端的自动化解决方案。模块主要用来记录用例执行情况,以便于高效的调查用例失败信息以及追踪用例执行情况。测试用例仓库用例仓库主要用来组织自动化测试用例。 一、什么是Selenium? Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:...
摘要:项目的一个需求是解析的日志文件。项目中已经按照业务规则对日志文件进行了处理命名规则如下并且所有的日志文件存放在统一路径下。模块使用缓存,所以会耗费内存,耗费量与要解析的文件相关。剩下的工作就是根据业务需要,对获得的基本信息进行处理。 项目的一个需求是解析nginx的日志文件。 简单的整理如下: 日志规则描述 首先要明确自己的Nginx的日志格式,这里采用默认Nginx日志格式: ...
摘要:项目的一个需求是解析的日志文件。项目中已经按照业务规则对日志文件进行了处理命名规则如下并且所有的日志文件存放在统一路径下。模块使用缓存,所以会耗费内存,耗费量与要解析的文件相关。剩下的工作就是根据业务需要,对获得的基本信息进行处理。 项目的一个需求是解析nginx的日志文件。 简单的整理如下: 日志规则描述 首先要明确自己的Nginx的日志格式,这里采用默认Nginx日志格式: ...
摘要:的继承关系使用做日志输出时,首先我们需要一个创建一个对象。再设计多级别的日志系统时,尤其要注意这点。当然,这样做其实是有悖于的本意的。是什么是一个程序内全局唯一的,所有对象的祖先。因此,直接修改是危险的。 0x00 python logging的继承关系 使用python做日志输出时,首先我们需要一个创建一个Logger对象:import logging; logger = log...
摘要:确认一切按预期运行。表明发生了一些意外,或者不久的将来会发生问题如磁盘满了。由于更严重的问题,软件已不能执行一些功能了。严重错误,表明软件已不能继续运行了。对于不能获取的名称,则记录到模块。 最近在写一些python脚本,总是使用print来打印信息感觉很low,所以抽空研究了一下python的logging库,来优雅的来打印和记录日志: 一、简单的将日志打印到屏幕: import l...
阅读 1671·2021-11-15 11:38
阅读 4513·2021-09-22 15:33
阅读 2331·2021-08-30 09:46
阅读 2175·2019-08-30 15:43
阅读 826·2019-08-30 14:16
阅读 2067·2019-08-30 13:09
阅读 1253·2019-08-30 11:25
阅读 699·2019-08-29 16:42