python 日志模块的基本操作

xiaoxiao2025-04-27  22

1.最简单的日志输出  https://www.cnblogs.com/yyds/p/6901864.html 先来试着分别输出一条不同日志级别的日志记录

# 在控制台输出日志的两种方式: import logging logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.")

第二种写法

logging.log(logging.DEBUG, "This is a debug log.") logging.log(logging.INFO, "This is a info log.") logging.log(logging.WARNING, "This is a warning log.") logging.log(logging.ERROR, "This is a error log.") logging.log(logging.CRITICAL, "This is a critical log.")

 1、经过配置的日志输出, 设置日志器级别   日志写在文件中

logging.basicConfig(level=logging.DEBUG, filename="./haha.txt")  # 日志器设置的日志级别 默认是WARNING, logging.debug("this is  Debug message") logging.info("this is  info message") logging.warning("this is  warning message") logging.error("this is  error message") logging.critical("this is  critical message")  # critical 极为重要的(汉语意思)

 2、配置日志器日志级别的基础上,在配置下日志输出目标文件和日志格式、指定格式

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"  # 时间, 日志级别, 日志器名称 ,字段信息 logging.basicConfig(filename='./my.log', level=logging.DEBUG, format=LOG_FORMAT) logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.")

3、在上面的基础上,我们再来设置下日期/时间格式

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p" logging.basicConfig(filename='./my.log2', level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT) logging.debug("This is a debug log.") logging.info("This is a info log.") logging.warning("This is a warning log.") logging.error("This is a error log.") logging.critical("This is a critical log.")

掌握了上面的内容之后,已经能够满足我们平时开发中需要的日志记录功能  

其值为:"%(levelname)s:%(name)s:%(message)s"             日志级别  日志器名称  日志内容。 问题1:为什么前面两条日志没有被打印出来?     这是因为logging模块提供的日志记录函数所使用的日志器设置的日志级别是WARNING,因此只有WARNING级别的日志记录     以及大于它的ERROR和CRITICAL级别的日志记录被输出了,而小于它的DEBUG和INFO级别的日志记录被丢弃了。 问题2:打印出来的日志信息中各字段表示什么意思?为什么会这样输出?     上面输出结果中每行日志记录的各个字段含义分别是:         日志级别:日志器名称:日志内容         之所以会这样输出,是因为logging模块提供的日志记录函数所使用的日志器设置的日志格式默认是BASIC_FORMAT,         其值为:"%(levelname)s:%(name)s:%(message)s" 问题3:如果将日志记录输出到文件中,而不是打印到控制台?         因为在logging模块提供的日志记录函数所使用的日志器设置的处理器 所指定的日志输出位置默认为:         sys.stderr。 问题4:我是怎么知道这些的?         查看这些日志记录函数的实现代码,可以发现:当我们没有提供任何配置信息的时候,这些函数都会去调用         logging.basicConfig(**kwargs)方法,且不会向该方法传递任何参数。继续查看basicConfig()方法的代码         就可以找到上面这些问题的答案了。 问题5:怎么修改这些默认设置呢?         其实很简单,在我们调用上面这些日志记录函数之前,手动调用一下basicConfig()方法,把我们想设置的内容         以参数的形式传递进去就可以了。

3. logging.basicConfig(**kwargs)函数说明

""" logging.basicConfig(**kwargs)函数 该方法用于为logging日志系统做一些基本配置,方法定义如下:     参数名称                      描述     filename            指定日志输出的文件名,设置后就不会在控制台输出了     filemode            指定日志打开格式,默认为"a",  该选项设置了 filename 才有效     format              指定日志格式化字符串,指定日志输出时  包含的字段信息,以及顺序     datefmt             指定日期/时间格式, 该选项 要在 format中包含 时间字段 %(asctime)时才有效     level               指定日志器的 日志级别     stream              指定日志输出目标 stream, 例如 sys.stdout、 sys.stderr、以及网络stream, 但是 stream 和filename 不能同时使用,会产生异常的     style               指定 format 格式字符串的风格, 可取值为 "%"、 "{"、"$" 默认为 %     handler             如果该选项被指定, 它应该是一个创建 多个 Handlers 可迭代的对象,这些handler将会被添加到 root logger                         注意 : filename , stream , handlers 这三个配置项只能存在一个, 不能同时出现两个或者三个 """

4. logging模块定义的格式字符串字段

""" 字段/属性名称                使用格式                             描述 asctime                %(asctime)s                    日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896 created                %(created)f                    日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值 relativeCreated      %(relativeCreated)d           日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的) msecs                  %(msecs)d                日志事件发生事件的毫秒部分 levelname              %(levelname)s           该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') levelno                %(levelno)s                    该日志记录的数字形式的日志级别(10, 20, 30, 40, 50) name                   %(name)s                   所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger message                 %(message)s                   日志记录的文本内容,通过 msg % args计算得到的 pathname                %(pathname)s           调用日志记录函数的源码文件的全路径 filename                %(filename)s           pathname的文件名部分,包含文件后缀 module                 %(module)s             filename的名称部分,不包含后缀 lineno                 %(lineno)d             调用日志记录函数的源代码所在的行号 funcName                %(funcName)s           调用日志记录函数的函数名 process                %(process)d                   进程ID processName            %(processName)s            进程名称,Python 3.1新增 thread                 %(thread)d             线程ID threadName             %(thread)s              线程名称 """

 

转载请注明原文地址: https://www.6miu.com/read-5029289.html

最新回复(0)