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 ...
随机推荐
- dll 修复....
之前在安装时总是会碰到缺少什么dll文件,总是头疼的要命,这次很幸运的在网上搜到了这个神奇的小玩意,只需要运行就能够修复缺少的所有的dll文件,所以在这小小的分享一下. 链接:https://pan. ...
- 【LOJ#6072】苹果树(矩阵树定理,折半搜索,容斥)
[LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满 ...
- iptables(3)
----------------------------iptables企业应用 ****************************单机防火墙列表#!/bin/bash#============ ...
- POJ 1845 Sumdiv(逆元)
题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点 1.整数的唯一分解定理 任意正整数都有且只有唯一的方式 ...
- Equivalent Sets HDU - 3836 (Tarjan)
题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...
- LOJ#510 北校门外的回忆(找性质+倍增+线段树)
这题一场模拟赛我们出了弱化版(n<=1e6),抄题面给的程序能拿到71分的好成绩 其实后面的29分是加了几个1e9的数据卡人 这糟老头子真是坏得很 正解我们机房看了三天 在这里感谢这篇题解的作者 ...
- C++常见函数使用
备注:总结C++中一些常见函数的使用,提高工作效率 数组的拼接: //报文头的前6B固定 DRV_UCHAR pkt_info_head[PALIVE_TO_NP_LEN] = {0x70, 0xff ...
- Day11--Python--函数名,闭包,迭代器
通过 lst.__iter__()拿到lst.的迭代器 1.函数名第一类对象 函数名就是变量名 1.函数名可以像变量一样互相赋值. 2.可以作为函数的参数,进行传递 3.可以作为返回值返回 4.可以作 ...
- Ubuntu下安装Goldendict(翻译软件)
Ubuntu直接安装 sudo apt-get install goldendict 通过源码安装 失败 下载词典 http://blog.sina.com.cn/s/blog_c58823b3010 ...
- mybatis的一些小知识
<update id="setReaded"> update wa_ent_job_app set IS_READ= 1, READ_TIME=now() where ...