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模块的使用的更多相关文章

  1. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

  2. python logging模块使用

    近来再弄一个小项目,已经到收尾阶段了.希望加入写log机制来增加程序出错后的判断分析.尝试使用了python logging模块. #-*- coding:utf-8 -*- import loggi ...

  3. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  4. (转)python logging模块

    python logging模块 原文:http://www.cnblogs.com/dahu-daqing/p/7040764.html 1 logging模块简介 logging模块是Python ...

  5. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  6. python logging—模块

    python logging模块 python logging提供了标准的日志接口,python logging日志分为5个等级: debug(), info(), warning(), error( ...

  7. Python logging模块无法正常输出日志

    废话少说,先上代码 File:logger.conf [formatters] keys=default [formatter_default] format=%(asctime)s - %(name ...

  8. 0x03 Python logging模块之Formatter格式

    目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...

  9. 0x01 Python logging模块

    目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...

  10. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

随机推荐

  1. Smarty的基本语法------变量调节器

    (1)首字母大写capitalize示例:{$articleTitle|capitalize}(2)字符串连接 cat示例:{$articleTitle|cat:" yesterday.&q ...

  2. 如何注册facebook应用

    最近项目中要做第三方登录,其中就有facebook的,下面讲解一下如何在facebook中创建应用 1.登录facebook的开发者平台(https://developers.facebook.com ...

  3. 跟我学习css3之transition

    HTML5和css3已经是将来的发展趋势,现在有很多移动端还有一些游戏公司已然使用它们开 发了比较成功的产品.我在2011年的时候也跟着技术潮流初浅的学习了html5+css3.毕竟那 时候我没有把学 ...

  4. 获取host信息

    QT如果要进行网络编程首先需要在.pro”中添加如下代码: QT += network 在头文件中包含相关头文件: #include <QHostInfo> #include <QN ...

  5. 20145233《网络对抗》Exp6 信息收集和漏洞扫描

    20145233<网络对抗>Exp6 信息收集和漏洞扫描 实验问题思考 哪些组织负责DNS,IP的管理 全球根服务器均由美国政府授权的ICANN统一管理,负责DNS和IP地址管理.全球一共 ...

  6. Hadoop 基础概念

    Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKe ...

  7. 如何执行oracle存储过程,就exec一下?

    不单单是exec一下,还是得分情况: 1.如果是命令窗口就用exec 存储过程名,举个栗子: EXEC procedure;--procedure是存储过程名 2.如果是PL/SQL窗口就用 begi ...

  8. Dev 之 GridControl 列表 显示底部(包括底部统计)

    1.列表 Gridview 显示底部 2 底部增加统计

  9. dom4j学习总结(一)

    dom4j学习总结(一) (一)创建Document的基本操作 /**  * xml基本操作  */ public void BaseOperation(){  //创建一个document  Doc ...

  10. 【QTP专题】03_Add-in Manager插件

    1.什么是Add-in Manager Add-in Manager,故名思议这是一个QTP插件管理器,每次启动前需要选择对应的插件才能进行测试. 打开QTP之后,我们可以看到有如下的一个Add-in ...