入门loging【python】模块-看了就能用

1. loging框架

主要分为4个框架:

  1. Loggers:可供程序直接调用的接口,app通过调用提供的api来记录日志
  2. Handlers:决定将日志记录分配至正确的目的地
  3. Filters:对日志信息进行过滤, 提供更细粒度的日志是否输出的判断
  4. Formatters:制定最终记录打印的格式布局

2. loging日志级别

主要分为5个级别:

  1. DEBUG :详细的信息,通常只出现在诊断问题上
  2. INFO:确认一切按预期运行
  3. WARNING:一些意想不到的事情发生了,或表明一些问题在不久的将来会出现(例如:磁盘空间低)。这个软件还能按预期工作。
  4. ERROR:更严重的问题,软件没能执行一些功能
  5. CRITICAL :一个严重的错误,这表明程序本身可能无法继续运行
  • 这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪,并被打印
  • 设置要打印的log时只需要设置优先级,比如设置打印INFO,那么比INFO优先级高的WARNING/ERROR/CRITICAL都将被打印,即根据Handlers的设置,将打印:INFO, WARNING, ERROR, CRITICAL

3. 输出日志到指定文件

3.1 示例1
# -*- coding:utf-8 -*-
import logging

logging.basicConfig(filename='logfile.log',format='[%(asctime)s-%(filename)s-%(levelname)s:%(message)s]', 
level = logging.DEBUG,
filemode='a',
datefmt='%Y-%m-%d %I:%M:%S %p')

def logtest():
    logging.error("这是一条error信息的打印")
    logging.info("这是一条info信息的打印")
    logging.warning("这是一条warn信息的打印")
    logging.debug("这是一条debug信息的打印")
    
if __name__ == '__main__':
    logtest()
  • 使用logging.basicConfig来指定要输出的文件以及log的输出形式、包括时间格式、日志级别等等。
  • Filename:指定路径的文件。
  • Format:设置log的显示格式(即在文档中看到的格式)。分别是时间+当前文件名+log输出级别+输出的信息
  • Level:输出的log级别,优先级比设置的级别低的将不会被输出保存到log文档中
  • Filemode: log打开模式
  • a:代表每次运行程序都继续写log。即不覆盖之前保存的log信息。
  • w:代表每次运行程序都重新写log。即覆盖之前保存的log信息
3.2 示例2
# -*- coding:utf-8 -*-
import logging

# 第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Log等级总开关

# 第二步,创建一个handler,用于写入日志文件
logfile = './log.txt'
fh = logging.FileHandler(logfile, mode='a') # open的打开模式这里可以进行参考
fh.setLevel(logging.DEBUG) # 输出到file的log等级的开关
# 创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING) # 输出到console的log等级的开关

# 第三步,定义handler的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
ch.setFormatter(formatter)

# 第四步,将logger添加到handler里面
logger.addHandler(fh)
logger.addHandler(ch)

# 日志
logger.debug('这是 logger debug message')
logger.info('这是 logger info message')
logger.warning('这是 logger warning message')
logger.error('这是 logger error message')
logger.critical('这是 logger critical message')
3.3 日志格式说明
函数:logging.basicConfig(**kwargs)
  • 该函数用于为logging日志系统做一些基本配置,方法定义如下:
  • 该函数可接收的关键字参数如下:
参数名称 描述
filename 指定日志输出目标文件的文件名,指定该设置项后日志信息将写入到指定文件,不会被输出到控制台
filemode 指定日志文件的打开模式,默认为’a’。需要注意的是,该选项要在filename指定时才有效
format 指定日志格式字符串(其实就是每一行的开头信息,每一行的后续信息将由后续的logging.info等指定内容填充),即指定日志输出时所包含的字段信息以及它们的顺序(参考文末内容)
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异常。
  • logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如下:

    • %(levelno)s: 打印日志级别的数值
    • %(levelname)s: 打印日志级别名称
    • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
    • %(filename)s: 打印当前执行程序名
    • %(funcName)s: 打印日志的当前函数
    • %(lineno)d: 打印日志的当前行号
    • %(asctime)s: 打印日志的时间
    • %(thread)d: 打印线程ID
    • %(threadName)s: 打印线程名称
    • %(process)d: 打印进程ID
    • %(message)s: 打印日志信息

猜你喜欢

转载自blog.csdn.net/nixiang_888/article/details/110260765