python3 logging模块_Python3 -- 日志模块 logging

常用:

importlogging#logging 配置

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s - %(pathname)s - %(funcName)s - %(lineno)d"logging.basicConfig(filename='my.log', level=logging.WARNING, format=LOG_FORMAT)

1. logging模块的日志级别

logging模块默认定义了以下几个日志等级,它允许开发人员自定义其他日志级别,但是这是不被推荐的,尤其是在开发供别人使用的库时,因为这会导致日志级别的混乱。

日志等级(level)描述

DEBUG

最详细的日志信息,典型应用场景是 问题诊断

INFO

信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作

WARNING

当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

ERROR

由于一个更严重的问题导致某些功能不能正常运行时记录的信息

CRITICAL

当发生严重错误,导致应用程序不能继续运行时记录的信息

开发应用程序或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试;应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。日志级别的指定通常都是在应用程序的配置文件中进行指定的。

logging模块提供的日志记录函数所使用的日志器设置的日志级别是WARNING,因此只有WARNING级别的日志记录以及大于它的ERROR和CRITICAL级别的日志记录被输出了,而小于它的DEBUG和INFO级别的日志记录被丢弃了。

2. logging.basicConfig()函数说明

该方法用于为logging日志系统做一些基本配置,方法定义如下:

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异常。

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

我们来列举一下logging模块中定义好的可以用于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

线程名称

4.经过配置的日志输出

先简单配置下日志器的日志级别

import logging

logging.basicConfig(level=logging.DEBUG)

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.")

输出结果:

DEBUG:root:This isa debug log.

INFO:root:Thisisa info log.

WARNING:root:Thisisa warning log.

ERROR:root:Thisisa error log.

CRITICAL:root:Thisis a critical log.

所有等级的日志信息都被输出了,说明配置生效了。

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

LOG_FORMAT = "%(asctime)s - %(levelname)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.")

此时会发现控制台中已经没有输出日志内容了,但是在python代码文件的相同目录下会生成一个名为'my.log'的日志文件,该文件中的内容为:

2017-05-08 14:29:53,783 - DEBUG - This isa debug log.2017-05-08 14:29:53,784 - INFO - This isa info log.2017-05-08 14:29:53,784 - WARNING - This isa warning log.2017-05-08 14:29:53,784 - ERROR - This isa error log.2017-05-08 14:29:53,784 - CRITICAL - This is a critical log.

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

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"DATE_FORMAT= "%m/%d/%Y %H:%M:%S %p"logging.basicConfig(filename='my.log', 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.")

此时会在my.log日志文件中看到如下输出内容:

05/08/2017 14:29:04 PM - DEBUG - This isa debug log.05/08/2017 14:29:04 PM - INFO - This isa info log.05/08/2017 14:29:04 PM - WARNING - This isa warning log.05/08/2017 14:29:04 PM - ERROR - This isa error log.05/08/2017 14:29:04 PM - CRITICAL - This is a critical log.

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

详细内容见:https://www.cnblogs.com/yyds/p/6901864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值