python模块之logging模块
1. 低配版
# 指定显示信息格式
import logging
logging.basicConfig(
level=20, # 设置显示或写入的起始级别
format="%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s", # 这里的格式可以自己改
# datefmt="%a,%d %b %Y %H:%M:%S" # 显示时间格式,不写就用上一行的asctime
# filename="test.log", # 日志写入的文件名
filemode="w" ) logging.debug("debug message") # 调试模式 10
logging.info("info message") # 正常运转模式 20
logging.warning("warning message") # 警告模式 30
logging.error("error message") # 错误模式 40
logging.critical("critical message") # 致命的 崩溃模式 50
低配版不能同时屏幕输出和写入
下面来看标配版
标配版
步骤如下:
1. 产生logger对象
logger = logging.getLogger()
2. 产生其他对象(屏幕对象,文件对象等)
sh = logging.StreamHandler() # 产生屏幕对象
fh1 = logging.FileHandler("staff.log", encoding="utf-8") # 产生文件对象,第一个参数为文件名
fh2 = logging.FileHandler("boss.log", encoding="utf-8") # 产生文件对象
3. 设置显示的格式
formater = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 执行设置显示格式
formater1 = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 这里的name是业务名,默认为root
formater12 = logging.Formatter("%(asctime)s - %(message)s")
4. 给对象绑定格式
sh.setFormatter(formater) # sh绑定formater
fh1.setFormatter(formater1) # fh1绑定formater1
fh2.setFormatter(formater2) # fh2绑定formater2
5. 给logger对象绑定其他对象
logger.addHandler(sh)
logger.addHandler(fh1)
logger.addHandler(fh2)
6. 设置显示级别
注意,其他对象的级别要高于logger的级别
logger.setLevel(10)
sh.setLevel(20) # 设置屏幕对象sh显示级别20及以上
fh1.setLevel(30)
fh2.setLevel(50)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")
高配版
高配版才是工作中经常用到的,通过创建logging配置文件
logging配置文件
import os
import logging.config # 定义三种日志输出格式
# 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 结束 # 设置log文件的目录和文件名
# 开始
log_file_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录
log_file_name = "test.log" # log文件名
# 结束 # 如果不存在定义的日志目录就创建一个
if not os.path.isdir(log_file_dir):
os.mkdir(log_file_dir) # log文件的全路径
log_file_path = os.path.join(log_file_dir, log_file_name) # log配置字典 LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': log_file_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}
配置文件
def load_my_logging_cfg():
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(__name__) # 生成一个实例
logger.info("It works!") # 记录该文件的运行状态 if __name__ == '__main__':
load_my_logging_cfg()
定义函数
# 好处:所有与logging配置相关的配置都写到字典中,更加清晰,方便管理 # 我们需要解决的问题
"""
1. 从字典加载配置 logging.config.dictConfig(settings.LOGGING_DIC)
2. logger对象都是配置到字典的logger键对应的子字典中,
而我们要获取不同的logger对象就是logger=logging.getLogger("loggers字字典的key名")
但问题是,我们想要不同的logger对象共用一段配置,那么肯定不能在logger字字典中定义n个key
我们的解决办法是定义一个空的key,再取logger对象时,logging.getLogger(__name__),
不同的文件的__name__不同,这保证了打印日志时标识信息不同,但是拿着改名字去loggers里找key时却找不到,
于是默认使用key=""的配置 """
好处及原因
以后要用到直接将配置文件拿来简单改下就可以了
python模块之logging模块的更多相关文章
- Python日志输出——logging模块
Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...
- Python自建logging模块
本章将介绍Python内建模块:日志模块,更多内容请从参考:Python学习指南 简单使用 最开始,我们用最短的代码体验一下logging的基本功能. import logging logger = ...
- Python实战之logging模块使用详解
用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所 ...
- Python中的logging模块就这么用
Python中的logging模块就这么用 1.日志日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICALDEBUG:详细的信息,通常只出现在诊断问题 ...
- python中日志logging模块的性能及多进程详解
python中日志logging模块的性能及多进程详解 使用Python来写后台任务时,时常需要使用输出日志来记录程序运行的状态,并在发生错误时将错误的详细信息保存下来,以别调试和分析.Python的 ...
- 常用模块:os模块,logging模块等
一 os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...
- os模块,sys模块,json和pickle模块,logging模块
目录 OS模块 sys模块 json和pickle模块 序列化和反序列化 json模块 pickle logging模块 OS模块 能与操作系统交互,控制文件 / 文件夹 # 创建文件夹 import ...
- 模块讲解---os模块,sys模块,json和pickle模块,logging模块
目录 模块的用法 os模块 常用的功能 sys模块 常用的功能 json和pickle模块 4. logging模块 模块的用法 通过 import 或者from......import...... ...
- Python中的logging模块
http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...
- python日志记录-logging模块
1.logging模块日志级别 使用logging模块简单示例: >>>import logging >>>logging.debug("this's a ...
随机推荐
- 自学Python4.5-装饰器举例
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- Nginx log日志切割shell
#!/bin/bash#此脚本用于自动分割Nginx的日志,包括access.log和error.log#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx- ...
- 微服务下 Spring Boot Maven 工程依赖关系管理
单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...
- JSF action actionListner 详解
https://stackoverflow.com/questions/3909267/differences-between-action-and-actionlistener actionLi ...
- 第十五节、韦伯局部描述符(WLD,附源码)
纹理作为一种重要的视觉线索,是图像中普遍存在而又难以描述的特征,图像的纹理特征一般是指图像上地物重复排列造成的灰度值有规则的分布.纹理特征的关键在于纹理特征的提取方法.目前,用于纹理特征提取的方法有很 ...
- Codeforces Round #523 (Div. 2) B Views Matter
传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 这是一道贪心题么???? 题意: 某展览馆展览一个物品,此物品有n堆,第 i 堆有a[ ...
- echarts柱状图鼠标移动在柱状图上显示数据给数据添加单位
解决问题: 关键代码如下: tooltip : { trigger: 'axis', formatter:function(params){ return params[0].name+"& ...
- JS引用类型
a,b都是引用类型,它们实际上指向同一个内存空间,同呼吸共命运
- qml:基本知识记录
1. property信号处理函数: 在qml中,通过property可以定义属性,这些属性自带信号处理函数,例如: property string szTitle: “hello wor ...
- python自动化开发-[第十三天]-javascript
今日概要 1.javascript简单语法 1.javascript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名S ...