Python模块学习

logging模块

logging模块用于日志的打印记录等,是一个健壮的Python程序所必须具有的模块。

logging模块支持的日志级别主要有五种:DEBUG,INFO,WARNING,ERROR,CRITICAL。优先级为:CRITICAL(50) > ERROR(40) > WARNING(30) > INFO(20) > DEBUG(10) 。 默认的级别为WARNING。Python只会打印比当前级别高的日志,比如我同时刷出了INFO和ERROR级别的日志,如果我的日志级别设置的为WAIRNING,那么只会打印ERROR的日志。

基本使用

引入logging模块,通过logging.级别来输出日志信息

1
2
3
4
5
6
7
import logging
 
logging.debug('debug level message')
logging.info('info level message')
logging.warning('warning level message')
logging.error('error level message')
logging.critical('crtical level message')

注意:由于默认级别为WARNING,所以上面的例子只会打印WARNING、ERROR、CRITICAL输出的信息

定义日志格式并输出到文件

logging提供了基础的日志模版,可以定义日志的输出格式,以及输出位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import logging
 
 
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    filename='log.log',
                    filemode='w')
 
logging.debug('debug level message')
logging.info('info level message')
logging.warning('warning level message')
logging.error('error level message')
logging.critical('crtical level message')

basicConfig支持的参数含义为:

  • level:为日志级别,可选参数有logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR,logging.CRITICAL,分别对应logging的五种日志级别。
  • filename: 表示日志文件的名称及路径。
  • filemode: 表示日志文件的打开模式,默认不指定的情况下为a,可以改为w。
  • datefmt: 对时间进行格式定制,和时间的格式化字符是相同的。
  • format: 对日志格式进行定义。
 1 %(name)s  # Logger的名字
 2 %(levelno)s  # 数字形式的日志级别
 3 %(levelname)s # 文本形式的日志级别
 4 %(pathname)s # 调用日志输出函数的模块的完整路径名,可能没有
 5 %(filename)s # 调用日志输出函数的模块的文件名
 6 %(module)s # 调用日志输出函数的模块名
 7 %(funcName)s # 调用日志输出函数的函数名
 8 %(lineno)d # 调用日志输出函数的语句所在的代码行
 9 %(created)f # 当前时间,用UNIX标准的表示时间的浮 点数表示
10 %(relativeCreated)d # 输出日志信息时的,自Logger创建以 来的毫秒数
11 %(asctime)s # 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
12 %(thread)d # 线程ID。可能没有
13 %(threadName)s # 线程名。可能没有
14 %(process)d # 进程ID。可能没有
15 %(message)s # 用户输出的消息
format支持的日志格式

多模块利用logging记录日志

我们可以把logging写到一个模块中,然后在需要记录的地方,导入模块,记录信息即可。

# writelog模块文件:
import logging
 
logging.basicConfig(level=logging.WARNING,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S',
                    filename='log.log',
                    filemode='a')
 
 
 
 
# 需要记录日志的py文件
import writelog
 
writelog.logging.debug('debug level message')
writelog.logging.info('info level message')
writelog.logging.warning('warning level message')
writelog.logging.error('error level message')
writelog.logging.critical('crtical level message')

更复杂的日志配置

在进行配置之前需要先了解logging模块中高级部分的几个概念,即Logger、Handler 及 Formatter。

  • Logger:日志记录器,是应用程序中能直接使用的接口
  • Handler:日志处理器,用以表明将日志保存到什么地方以及保存多久
  • Formatter:格式化,用以配置日志的输出格式

在典型的使用场景中,一个日志记录器使用一个日志处理器,一个日志处理器使用一个日志格式化。

PS:对于比较复杂的项目,我们可以将日志的配置保存到一个配置文件中,然后在代码中使用fileConfig函数来读取配置文件。

# 日志配置文件logging.cnf

[loggers]
keys = root

[handlers]
keys = logfile

[formatters]
keys = generic

[logger_root]
handlers = logfile

[handler_logfile]
class = handlers.TimeRotatingFileHandler
args = ('app.log','midnight',1,10)
level = DEBUG
formater = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s] %(message)s

  在这个日志配置文件中,我们首先在[loggers]中声明一个名为root的logger,在[handlers]中声明一个名为logfile的handler,并在[formatters]中声明一个名为generic的formatter。然后我们在[logger_root]中定义root这个logger所使用的handler,在[handler_logfile]中定义handler输出日志的方式、日志文件的切换时间等,最后在[formatter_generic]中定义了日志的格式,包括日志的产生时间、日志级别、产生日志的文件名以及行号的信息。

  有了配置文件,那么我们只需要使用logConfig函数进行配置的加载,然后就可以记录日志了。

import logging.config

logging.config.fileConfig('logging.cnf')   # 加载配置文件
 
logging.debug('this is debg')
logging.info('this is info')
logging.warning('this is warn')
logging.error('this is err')
logging.critical('this is cri')

 

原文地址:https://www.cnblogs.com/dachenzi/p/7990174.html