Python之配置日志模块logging

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一、定义日志打印方式

如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息。可以运用日志模块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,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
65 4
|
28天前
|
Python
Python Internet 模块
Python Internet 模块。
121 74
|
2月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
125 63
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
7天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
20 3
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
10天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
2月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
1月前
|
SQL
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO
南大通用GBase 8a配置gcware日志等级,减少日志输出,节省磁盘IO
|
1月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
53 5