python logging模块的使用
logging 专门用于记录日志的模块,相对于print来说,logging 提供了日志信息的分级、格式化、过滤等功能。在程序中定义丰富有条理的log信息,可以方便分析程序的运行状态,在发生问题是可有效定位和分析问题。
logging的几个部分:
1. Logger:进行日志记录时创建的对象,调用它的方法传入日志模板和信息 来生成日志记录logRecord
2. Handler:用来处理日志记录的类,指定输入日志位置和存储形式等
3. Formatter:指定日志的输出格式,返回字符串给 Handler 处理
4. Filter:通过级别或者关键字等过滤日志
5. Parent Handler: Handler 之间存在层级关系,使不同的 Handler 间可共享相同功能的代码
用法:
1:默认 Logger 和 basicConfig 格式输出
import logging
import time # 返回一个默认的root Logger,默认level=warning,打印内容为每个级别的信息
logger = logging.getLogger()
# 格式化输出log信息,返回的是日志字符串,传回给 Handler 来处理。
logging.basicConfig(
# 指定log级别:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET
# FATAL:致命错误;CRITICAL:内存磁盘空间耗尽等;ERROR:IO操作失败或连接有问题;WARNING:警告不是错误;INFO:处理请求或日常状态变化;DEBUG:调试信息中间状态等
level= logging.ERROR,
# 指定保存log信息的文件名称
filename="logging.txt",
# 设置文件的读写方式
# r 只读、w 创建覆盖写入、a 创建追加写入、
# rb 二进制格式打开只读、wb 二进制创建覆盖写入、ab 二进制创建追加写入、
# r+ 打开读写、w+ 创建覆盖读写、a+ 创建追加读写
# rb+ 二进制格式打开读写、wb+ 二进制创建覆盖读写;ab+ 二进制追加读写
filemode="w",
# 格式化输出
format=" 日志时间:%(asctime)s \n"
" 日志级别数值:%(levelno)s \n"
" 日志级别名称:%(levelname)s \n"
" 打印日志信息:%(message)s \n"
" 当前执行程序的路径:%(pathname)s \n"
" 当前执行程序名:%(filename)s \n"
" 当前模块名:%(name)s \n"
" 当前执行函数:%(funcName)s \n"
" 日志的当前行号:%(lineno)s \n"
" 线程ID:%(thread)d \n"
" 线程名称:%(threadName)s \n"
" 进程ID:%(process)d \n"
"----------------------------------",
# 设置 asctime 的输出格式
datefmt= time.strftime("%Y-%m-%d %X")
) logger.info("info message")
logger.debug("debug message")
logger.warning("warning message")
logger.error("error message")
logging.critical("critical error message") """
运行结果:打印log到logging.txt文件中 日志时间:2019-03-19 16:23:10
日志级别数值:40
日志级别名称:ERROR
打印日志信息:error message
当前执行程序的路径:/Users/soumoemoe/Documents/pyAutoTest/log.py
当前执行程序名:log.py
当前模块名:root
当前执行函数:<module>
日志的当前行号:40
线程ID:140735671509888
线程名称:MainThread
进程ID:42144
----------------------------------
日志时间:2019-03-19 16:23:10
日志级别数值:50
日志级别名称:CRITICAL
打印日志信息:critical error message
当前执行程序的路径:/Users/soumoemoe/Documents/pyAutoTest/log.py
当前执行程序名:log.py
当前模块名:root
当前执行函数:<module>
日志的当前行号:41
线程ID:140735671509888
线程名称:MainThread
进程ID:42144
----------------------------------
"""
2:Logger、Handler、Formatter、addHandler
import logging
import sys
# 声明 logger
logger = logging.getLogger(__name__)
# 指定log级别
logger.setLevel(logging.DEBUG) # FileHandler log日志格式化输出到文件中
fileHandler = logging.FileHandler("logging.txt")
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler) # StreamHandler sys.stderr,sys.stdout 输出到控制台
streamHandler = logging.StreamHandler(sys.stderr)
streamHandler.setLevel(level=logging.DEBUG)
logger.addHandler(streamHandler) logger.info("This is a log info")
logger.debug("Debugging")
logger.warning("Warning exists")
logger.error("Error Message")
logger.critical("Critical message")
3:Parent Handler,logger配置服用,以下childlog.py复用了log.py文件中Logger的配置,注意两个文件中 getLogger的参数
#log.py import logging
import sys
import childlog logger = logging.getLogger("log")
logger.setLevel(logging.DEBUG) streamHandler = logging.StreamHandler(sys.stderr)
streamHandler.setLevel(level=logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s - %(levelname)s - %(message)s")
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler) logger.info("Log Info")
logger.debug("Log Debug")
logger.warning("Log Warning")
logger.error("Log Error")
logger.critical("Log Critical") childlog.run()
# childlog.py import logging
logger = logging.getLogger("log.childlog")
def run():
logger.info("Child Info")
logger.debug("Child Debug")
logger.error("Child Error")
运行log.py 结果为:
2019-03-19 17:10:13,951 - log.py - INFO - Log Info
2019-03-19 17:10:13,951 - log.py - DEBUG - Log Debug
2019-03-19 17:10:13,951 - log.py - WARNING - Log Warning
2019-03-19 17:10:13,951 - log.py - ERROR - Log Error
2019-03-19 17:10:13,951 - log.py - CRITICAL - Log Critical
2019-03-19 17:10:13,951 - childlog.py - INFO - Child Info
2019-03-19 17:10:13,951 - childlog.py - DEBUG - Child Debug
2019-03-19 17:10:13,951 - childlog.py - ERROR - Child Error
4:异常捕获,打印Traceback信息:或者用exception打印
list = [1,2]
try:
for i in range(3):
print(list[i])
except Exception:
logger.error("访问列表出错") """
运行结果:
2019-03-19 17:16:42,608 - log.py - ERROR - 访问列表出错
1
2
""" #-----------------------------------------------------------------
# 设置 exc_info = True,会输出完整的Traceback信息
list = [1,2]
try:
for i in range(3):
print(list[i])
except Exception:
logger.error("访问列表出错", exc_info = True)
#logger.exception("访问列表出错") """
运行结果:
2019-03-19 17:18:37,204 - log.py - ERROR - 访问列表出错
Traceback (most recent call last):
File "/Users/soumoemoe/Documents/pyAutoTest/log.py", line 68, in <module>
print(list[i])
IndexError: list index out of range
1
2
"""
5:Filter 通过Logger名称过滤log
import logging
import sys logger = logging.getLogger("log") streamHandler = logging.StreamHandler(sys.stderr)
streamHandler.setLevel(level=logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s - %(levelname)s - %(message)s")
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler) filter = logging.Filter(name = "log.a")
streamHandler.addFilter(filter) logging.getLogger("log.a").warning("log.a")
logging.getLogger("log.b").warning("log.b") #log.b没有输出 """
运行结果:
2019-03-19 17:33:39,979 - log.py - WARNING - log.a
"""
python logging模块的使用的更多相关文章
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
- python logging模块使用
近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...
- 读懂掌握 Python logging 模块源码 (附带一些 example)
搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...
- (转)python logging模块
python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...
- python logging—模块
python logging模块 python logging提供了标准的日志接口,python logging日志分为5个等级: debug(), info(), warning(), error( ...
- Python logging模块无法正常输出日志
废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...
- 0x03 Python logging模块之Formatter格式
目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...
- 0x01 Python logging模块
目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
随机推荐
- Idea2017常用功能
1,添加java工程 2,导出可执行jar 3,本地代码提交svn新分支 4,乱码问题解决 一次解决所有问题,只需做配置文件的修改即可 解决方案: 在 IntelliJ IDEA 201 ...
- Vmware下CentOs7 桥接模式下配置固定IP
1.安装完CentOS7后 修改虚拟机网络适配器配置:改成桥接模式 2.设置Vmware的 编辑->虚拟网络编辑器 3.重启CentOs7 , 查看网络 # ip addr interface是 ...
- Error creating bean with name 'us' defined in class path resource [com/liuyang/test/DI/beans2.xml]: Cannot resolve reference to bean 'daoa' while setting bean property 'daoa'; nested exception is org.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'us' defined ...
- mysql - 索引的一些理解
推荐下这篇文章 http://blog.codinglabs.org/articles/theory-of-mysql-index.html 写的十分的不错.留着以后慢慢看,慢慢的理解.
- java GC机制(转)
http://blog.csdn.net/zsuguangh/article/details/6429592 1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之 ...
- 云存储上传控件更新日志-Xproer.cloud2
官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/cloud2/index.asp 在线演示:http://www.ncmem.c ...
- SSH 密钥登录 SecureCRT
https://www.qcloud.com/doc/product/213/2036 1.3. 使用SecureCRT登录 1.3.1. 复制公钥 登录腾讯云控制台,点击[云服务器]-[SSH密钥] ...
- JavaScript语言精粹 笔记05 正则表达式
正则表达式 正则表达式以方法的形式被用于对字符串中的信息进行查找.替换画图提取操作.可处理正则表达式的方法有:regexp.exec, regexp.test,string.match, string ...
- 编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本
建议156:利用特性为应用程序提供多个版本 基于如下理由,需要为应用程序提供多个版本: 应用程序有体验版和完整功能版. 应用程序在迭代过程中需要屏蔽一些不成熟的功能. 假设我们的应用程序共有两类功能: ...
- 【小梅哥SOPC学习笔记】给NIOS II CPU增加看门狗定时器并使用
给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 1. 设置计时溢出时间为1秒 2. 计数器位宽为32位 3. 勾选No Start/Stop control bits 4. 勾选F ...