博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python之配置日志模块logging
阅读量:6840 次
发布时间:2019-06-26

本文共 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,如需转载请自行联系原作者

你可能感兴趣的文章
airflow-datapipeline解放双手,撸起来
查看>>
解决IE浏览器下对于ajax重复提交处理的bug
查看>>
import static和import的区别
查看>>
使用fastjson
查看>>
[算法研究]の冒泡算法--javascript实现
查看>>
Hibernate Annotation笔记
查看>>
年轻时不做会后悔的八件事
查看>>
重读传递参数
查看>>
剖析 Recipe
查看>>
OS X系统启动的基本步骤
查看>>
C Primer Plus 第6章 C控制语句:循环 6.11 使用函数返回值的循环的例子
查看>>
怎么保存退出vi编辑
查看>>
JBoss 系列三十九:jBPM5示例之 Multiple Instance Sub-Process
查看>>
C++面向对象网络编程之SockCli
查看>>
REST概述
查看>>
史上最详细的Android Studio系列教程三--快捷键
查看>>
goclipse 修改输出编译命令,显示完整的错误信息
查看>>
如何提高你的销售业绩
查看>>
中小企业云ERP系统的实施应用特点
查看>>
Memcached在项目中的应用
查看>>