开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

18Python标准库系列之logging模块

简介:
+关注继续查看

Python标准库系列之logging模块


This module defines functions and classes which implement a flexible event logging system for applications and libraries.

The key benefit of having the logging API provided by a standard library module is that all Python modules can participate in logging, so your application log can include your own messages integrated with messages from third-party modules.

官方文档:https://docs.python.org/3.5/library/logging.html

logging模块用于便捷记录日志且线程安全。


日志级别

Level Numeric value
CRITICAL 50
ERROR 40
WARNING 30
INFO 20
DEBUG 10
NOTSET 0

只有大于当前日志等级的操作才会被记录。

实例

写入单文件

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# 导入logging模块
import logging
 
# 创建一个log.log日志文件
logging.basicConfig(filename='log.log',
                    # 格式化的字符串
                    format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
                    # 时间
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    # 错误级别
                    level=logging.NOTSET
                    )
                     
logging.critical('critical')
logging.error('error')
logging.warning('warning')
logging.info('info')
logging.debug('debug')
logging.log(logging.INFO, 'NOTSET')

执行结果

1
2
3
4
5
6
7
8
9
10
11
12
ansheng@ansheng-me:~$ ls 
log.py
ansheng@ansheng-me:~$ python log.py 
ansheng@ansheng-me:~$ ls
log.log  log.py
ansheng@ansheng-me:~$ cat log.log 
2016-05-27 21:46:15 PM - root - CRITICAL - log: critical
2016-05-27 21:46:15 PM - root - ERROR - log: error
2016-05-27 21:46:15 PM - root - WARNING - log: warning
2016-05-27 21:46:15 PM - root - INFO - log: info
2016-05-27 21:46:15 PM - root - DEBUG - log: debug
2016-05-27 21:46:15 PM - root - INFO - log: NOTSET

logging.basicConfig函数各参数

参数 说明
filename 指定日志文件名
filemode 和file函数意义相同,指定日志文件的打开模式,’w’或’a’
format 指定输出的格式和内容,format可以输出很多有用信息,如下所示
datefmt 指定时间格式,同time.strftime()
level 设置日志级别,默认为logging.WARNING

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 打印日志信息

多文件日志

对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件,logging.basicConfig将无法完成,需要自定义文件和日志操作对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
 
import logging
 
# 创建文件
file_1 = logging.FileHandler("log1.log""a")
# 创建写入的日志格式
fmt1 = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(message)s")
# 文件用格式
file_1.setFormatter(fmt1)
 
file_2 = logging.FileHandler("log2.log""a")
fmt2 = logging.Formatter()
file_2.setFormatter(fmt2)
 
logger1 = logging.Logger("s1", level=logging.ERROR)
logger1.addHandler(file_1)
logger1.addHandler(file_2)
 
logger1.critical("1111")
1
2
3
4
5
6
7
8
# 定义文件
file_2_1 = logging.FileHandler('l2_1.log''a')
fmt = logging.Formatter()
file_2_1.setFormatter(fmt)
 
# 定义日志
logger2 = logging.Logger('s2', level=logging.INFO)
logger2.addHandler(file_2_1)

如上述创建的两个日志对象

  1. 当使用logger1写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中

  2. 当使用logger2写日志时,会将相应的内容写入 l2_1.log 文件中










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925799,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python 面向对象 9: 模块和包
Python 面向对象 9: 模块和包
43 0
Python模块与包
Python模块与包
59 0
第6天:Python 模块和包
第6天:Python 模块和包
32 0
Python 之设计模式、异常处理、模块与包、文件操作及编码
Python 之设计模式、异常处理、模块与包、文件操作及编码
32 0
15、python模块和包
模块和包 一 模块 1 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。    但其实import加载的模块分为四个通用类别:   1 使用python编写的代码(.
1222 0
+关注
20376
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载