前言

在应用中记录日志是程序开发的重要一环,也是调试的重要工具。但却很容易让人忽略。之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难。最近恰好有时间可以梳理一下python日志的功能,下面是一点笔记。

使用

python标准库中提供了记录日志的方案。

import logging
from logging.config import dictConfig logger = logging.getLogger(__name__) # 定义格式
formatter = logging.Formatter(fmt='%(asctime)s %(name)-12s %(levelname)-8s %(message)s') # 定义日志处理器
streamHdl = logging.StreamHandler() # 设定日志级别
streamHdl.setLevel(logging.DEBUG) # 设定日志格式
streamHdl.setFormatter(formatter) # 给日志器添加日志处理器
logger.addHandler(streamHdl) # 记录日志
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()

从上面的演示这个模块的使用是比较简单的。但在应用中深入使用有些需要注意的地方:

parent logger / child logger

在多模块程序中使用多个模块是很常见的,被引用模块中的日志对象容易让人迷惑。我们知道一个应用有一个唯一的文件入口,如果这个入口文件中定义了logger,那这个logger就是parent logger, 其中被导入的模块中定义的logger就是child logger, 与我们常见的在一个模块中实例化使用不同,在每一个需要记录日志的地方都需要产生一个logger,然后进行日志记录操作。每个模块内部所记录的日志根据每个logger的配置信息对日志进行操作,然后根据该logger是否反向传递到parent logger进一步操作。反向传递到parent logger之后,依旧像普通的logger一样对日志进行处理。

日志的配置

https://docs.python.org/3/howto/logging.html#configuring-logging

每个logger都可以通过ini文件、yarm文件、对象等形式进行配置,这里主要讲以字典形式进行的配置。


logging_config = dict(
version=1,
formatters={
'f': {'format':
'%(asctime)s000000 %(name)-12s %(levelname)-8s %(message)s'}
},
handlers={
'h': {'class': 'logging.StreamHandler',
'formatter': 'f',
'level': logging.DEBUG}
},
root={
'handlers': ['h'],
'level': logging.DEBUG,
},
)
dictConfig(logging_config)

当在一个文件中使用dictConfig,就给该文件的logger定义了配置。

异常的捕捉

logger.error()与logger.exception()之间的区别在于error()只会打印一句话,而exception()则会将异常的错误栈都会打印出来。对于出现代码异常的地方,可以使用exception()用作记录。

普通日志直接使用logging模块来记录,应用内不处理日志的去向,作为事件流统一输出到标准输出,采用第三方日志采集工具进行捕获和处理。但也不能太绝对,如果外部收集日志的程序缺少对日志级别分类,或者对异常记录缺少必要的支持,就需要内置的模块进行处理。

常用的内置handler

    https://docs.python.org/3/howto/logging.html#useful-handlers

参考

https://12factor.net/logs

https://docs.python.org/3/howto/logging.html

https://docs.python.org/3/howto/logging-cookbook.html

python日志模块笔记的更多相关文章

  1. python日志模块logging

    python日志模块logging   1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...

  2. python日志模块

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...

  3. Python 日志模块实例

    python 打印对象的所有属性值: def prn_obj(obj):     print '\n'.join(['%s:%s' % item for item in obj.__dict__.it ...

  4. Python日志模块logging用法

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  5. python日志模块的使用

    学习一下python的日志模块logging,可以参考如下博客,写得很详细 https://www.cnblogs.com/yyds/p/6901864.html https://www.cnblog ...

  6. python日志模块logging学习

    介绍 Python本身带有logging模块,其默认支持直接输出到控制台(屏幕),或者通过配置输出到文件中.同时支持TCP.HTTP.GET/POST.SMTP.Socket等协议,将日志信息发送到网 ...

  7. Python 日志模块详解

    前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...

  8. Python日志模块的管理(二)

    日志模块可以通过封装一个类,也可以通过配置文件取管理 新建1个log.ini文件 [loggers] keys=root [handlers] keys=fileHandler,streamHandl ...

  9. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

随机推荐

  1. Week2 Teamework from Z.XML 软件分析与用户需求调查(五)从对比中看见必应助手发展空间

    本文将主要探讨软件功能前景(浮动头像界面,升级式角色),找出与bing助手相类似功能的资深软件,分析这些软件的发展趋势和用户体验,从历史的角度来评测bing助手的某些功能的前景. 1.浮动头像界面-曲 ...

  2. (转载)MYSQL千万级数据量的优化方法积累

    转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...

  3. c语言第五次作业-指针-总结博客

    本次作业亮点 1.1整体情况 本次作业主要是对上次的大作业利用指针进行改进,但是大部分同学并没有很好按照老师的要求对大作业进行改进,函数的分装性也做得不够好,由于是初步学习指针,大家在本次的作业改造中 ...

  4. stap用法

    sudo stap -g submit_bio.stp -D MAXACTION=100000 kern_path_locked lookup_one_len filename_create --&g ...

  5. qemu的配置

    qemu的配置: buildroot的配置不需要多做配置,对了,设置下生成的文件系统是rootfs.ext2 内核打开virtio qemu脚本会在后面 疑问: 1)为什么qemu启动起来之后,没有e ...

  6. Educational Codeforces Round 53 Div. 2翻车记

    A:差点开场懵逼.只要有相邻两位不同就可以作为答案. #include<iostream> #include<cstdio> #include<cmath> #in ...

  7. 安全警告——“Windows已经阻止此软件因为无法验证发行者”解决办法

    步骤:打开IE工具-->Internet选项-->安全-->自定义级别 -->找到ActiveX 控件和插件,按照图里进行配置.

  8. [洛谷P2986][USACO10MAR]伟大的奶牛聚集Great Cow Gat…

    题目大意:给你一棵树,每个点有点权,边有边权,求一个点,使得其他所有点到这个点的距离和最短,输出这个距离 题解:树形$DP$,思路清晰,转移显然 卡点:无 C++ Code: #include < ...

  9. [洛谷P1892]团伙

    题目大意:有n个人,关系为:朋友的朋友是朋友,敌人的敌人是朋友.如果是朋友就在一个团队内,是敌人就不在,现在给出一关系,问最多有多少团伙.题解:并查集,建反集,如果是朋友,就把他们的并查集合并:如果是 ...

  10. cf 442 D. Olya and Energy Drinks

    cf 442 D. Olya and Energy Drinks(bfs) 题意: 给一张\(n \times m(n <= 1000,m <= 1000)\)的地图 给出一个起点和终点, ...