Python日志模块logging(python logging模块默认日志)

网友投稿 992 2022-09-12

Python日志模块logging(python logging模块默认日志)

Python日志模块logging(python logging模块默认日志)

官方文档:

https://docs.python.org/2/library/logging.html

logging模块提供了两种记录日志的方式:

第一种方式是使用logging提供的模块级别的函数

第二种方式是使用Logging日志系统的四大组件

其实,logging所提供的模块级别的日志记录函数也是对logging日志系统相关类的封装而已。

logging模块定义的模块级别的常用函数:

函数

说明

logging.debug(msg, *args, **kwargs)

创建一条严重级别为DEBUG的日志记录

logging.info(msg, *args, **kwargs)

创建一条严重级别为INFO的日志记录

logging.warning(msg, *args, **kwargs)

创建一条严重级别为WARNING的日志记录

logging.error(msg, *args, **kwargs)

创建一条严重级别为ERROR的日志记录

logging.critical(msg, *args, **kwargs)

创建一条严重级别为CRITICAL的日志记录

logging.log(level, *args, **kwargs)

创建一条严重级别为level的日志记录

logging.basicConfig(**kwargs)

对root logger进行一次性配置

其中logging.basicConfig(**kwargs)函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式”等信息,其他几个都是用于记录各个级别日志的函数。

具体如下:

参数名称

描述

filename

将日志信息写入文件中,指定该设置项后日志信息就不会被输出到控制台了

filemode

指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效

format

指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。

datefmt

指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效。

level

指定日志级别

stream

指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常

style

Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'

handlers

Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

上面的时间需要使用format中包含时间段,过于format还有如下参数:

字段/属性名称

使用格式

描述

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

线程名称

一、使用logging提供的模块级别的函数记录日志

可以通过logging模块定义的模块级别的方法去完成简单的日志记录

只有级别大于或等于日志记录器指定级别的日志记录才会被输出,小于该级别的日志记录将会被丢弃。

logging的日志级别由低到高分为 debug(), info(), warning(), error() and critical() 5个级别

CRITICAL(50) > ERROR(40) > WARNING(30) > INFO(20) > DEBUG(10)

简单使用示例:

运行结果:

查看E:\\logging\\abc.log文件中的内容,如下:

可以看到,由于设置的日志级别为WARNING,所以只打印了比WARNING级别更高的日志。

二、使用logging四大组件记录日志

logging模块的四大组件:

如上面所说,logging.basicConfig()函数中可通过具体参数来更改logging模块的行为

日志同时打印到屏幕和文件:

运行结果:

如果想为多个用户创建不同的日志,只需要创建流时创建不同的流即可,而不需要创建多个日志对象,如果情况特殊考虑单独在创建一个对象。其实我们可以在创建流的时候直接指定日志等级。流的等级是优先于日志对象的。

如下创建两个流:

运行结果:

这样我们便创建了两种不同的日志

三、日志分割

将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能。因此,有必要对日志文件按某种条件进行切分。

分割日志的触发条件:大小、日期,或者大小加上日期。

说是切分,实际上是,当一个日志文件达到触发条件后,对日志文件进行重命名,之后再新建原来名称的日志文件(此时就是空文件了),新产生的日志就写入新的日志文件。

为啥叫回滚呢?当分割的日志文件达到指定数目的上限个数时,最老的日志文件就会被删除。

logging库提供了2个可以用于日志滚动的class,一个是RotatingFileHandler,它主要是根据日志文件的大小进行滚动;另一个是TimeRotatingFileHandler,它主要是根据时间进行滚动。在实际应用中,通常根据时间进行滚动。

TimedRotatingFileHandler的构造函数定义如下:

按秒切分示例:

运行结果:

注意:

timefilehandler.suffix的设置一定要和时间单位相符,不如按秒切分,就必须设置timefilehandler.suffix= "%Y-%m-%d_%H-%M-%S.log",否则就不能删除旧文件了。按天、按分钟切分也是如此。

RotatingFileHandler基于文件大小切分

示例:

运行结果:

-----------------------------------------------------------------------------

推荐:

详细全面:https://cnblogs.com/yyds/p/6901864.html

https://cnblogs.com/hanmk/p/10448963.html

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:cmd命令
下一篇:nbtstat命令详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~