本文共 3213 字,大约阅读时间需要 10 分钟。
一、定义日志打印方式
如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息。可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义。
常见打印日志信息形式如下:
1 2 3 4 | import logging logging.debug("========定义要打印的内容====debug①===========") logging.info("=========定义要打印的内容====info②===========") logging.warning("======定义要打印的内容====warning③===========") |
默认情况下,logging将日志打印到屏幕,日志级别为WARNING;
日志级别优先关系为:CRITICAL>ERROR>WARNING>INFO>DEBUG>NOTSET,
对于日志等级:
1 2 3 4 5 6 7 8 | CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 |
当然也可以根据自己的需求定义优先级别,从以上日志优先级别屏幕上打印的内容为:
WARNING:root;======定义要打印的内容====warning③===========
二、通过logging.basicConfig函数对日志的输出格式进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python # -*- coding:utf8 -*- import logging def logs(arg): logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s %(message)s' , datefmt = '%Y-%m-%d %H:%M:%S' , filename = 'myapp.log' , filemode = 'w' ) logging.debug(arg) logging.info(arg) logging.warning(arg) logs( 'python is language' ) |
1 2 3 4 5 | [root@Python log] # python log.py [root@Python log] # cat myapp.log 2016-01-27 10:44:57 python is language 2016-01-27 10:44:57 python is language 2016-01-27 10:44:57 python is language |
logging.basicConfig函数各参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | filename: 指定日志文件名 filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a' format: 指定输出的格式和内容,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: 打印日志信息 datefmt: 指定时间格式,同time.strftime() level: 设置日志级别,默认为logging.WARNING stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略 |
三、运行logging模块记录程序操作
有如下日志定义文件(log.py):
1 2 3 4 5 6 7 8 9 10 11 12 | [root@Python log] # cat log.py #!/usr/bin/env python # -*- coding:utf8 -*- import logging def logs(arg): logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s %(message)s' , datefmt = '%Y-%m-%d %H:%M:%S' , filename = 'shopping.log' , filemode = 'a' ) logging.info(arg) [root@Python log] # |
应用程序内容如下:
1 2 3 4 5 6 7 8 9 10 11 | [root@Python log] # cat shopping.py #!/usr/bin/env python # -*- coding:utf8 -*- from log import logs user_dict = { 'apple' : 4.5 , 'pear' : 3.3 , 'banana' : 2.5 , 'tomato' : 1.5 } ch_fruit = raw_input ( "请输入要买的水果:" ) num = int ( raw_input ( "请输入要买入水果的重量:" )) total_prices = user_dict[ch_fruit] * num print "您买的 %s 需要支付 %d 元" % (ch_fruit,total_prices) record = "购买%d千克%s" % (num,ch_fruit) #定义购买记录信息 logs(record) #调用log.py中定义的函数logs |
运行shopping.py
1 2 3 4 5 6 7 8 9 10 11 12 | [root@Python log] # python shopping.py 请输入要买的水果:banana 请输入要买入水果的重量: 3 您买的 banana 需要支付 7 元 [root@Python log] # python shopping.py 请输入要买的水果:pear 请输入要买入水果的重量: 10 您买的 pear 需要支付 33 元 [root@Python log] # python shopping.py 请输入要买的水果:apple 请输入要买入水果的重量: 8 您买的 apple 需要支付 36 元 |
查看生成日志记录信息:
1 2 3 4 5 | [root@Python log] # cat shopping.log 2016-01-27 11:10:47 购买3千克banana 2016-01-27 11:10:53 购买10千克pear 2016-01-27 11:11:02 购买8千克apple [root@Python log] # |
思路:在生产中可以把日志记录模块写到一个文件中,然后在生产的程序中直接导入即可,最后根据需求定义要写入的记录内容
本文转自027ryan 51CTO博客,原文链接:http://blog.51cto.com/ucode/1738898,如需转载请自行联系原作者