一、日志概念

日志是一种可以追踪某些软件运行时所发生事件的方法。 软件开发人员可以向他们的代码中

调用日志记录相关的方法来表明发生了某些事情。 一个事件可以用一个可包含可选变量数据

的消息来描述。 此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。

Python自身也提供了一个用于记录日志的标准库模块--logging。 logging模块定义的函数和

类为应用程序和库的开发实现了一个灵活的事件日志系统,由标准库模块提供日志记录API,

关键好处是所有Python模块都可以使用这个日志记录功能。 所以,你的应用日志可以将你自

己的日志信息与来自第三方模块的信息整合起来。

总之,日志的作用就是:

调试软件程序

了解软件程序运行情况,确定软件运行是否运行正常

软件程序故障分析与定位

二、logging模块

1、logging日志级别

日志级别

数值

使用范围

CRITICAL

50

特别糟糕的事情,如内存耗尽,磁盘空间为空,一般很少使用

ERROR

40

发生错误时,如IO操作失败或者连接问题

WARNING

30

发生很重要的事情,但并不是错误,是警告信息

INFO

20

处理请求或者状态变化等日常事务

DEBUG

10

调试过程中使用DEBUG等级,如算法中每个循环的中间状态

NOTSET

0

很少使用

内建等级中,级别最低的是DEBUG,级别最高的是CRITICAL。例如setLevel(logging.INFO),此时函数参数为INFO,那么该logger将只会处理INFO、WARNING、ERROR和CRITICAL级别的日志,而DEBUG级别的消息将会被忽略/丢弃。

2、logging日志系统的四大组件

在实际操作中,一般是先创建日志记录器(logging.getLogger),然后再设置日志级别(logger.setLevel),接着再创建日志文件,也就是日志保存的地方(logging.FileHandler),然后再设置日志格式(logging.Formatter),最后再将日志处理程序记录到记录器(addHandler)

组件名称

类名

功能简介

日志器

Logger

可供程序直接调用的接口,app通过调用提供的api来记录日志

处理器

Handler

决定将日志记录分配至正确的目的地

过滤器

Filter

对日志信息进行过滤,提供更细粒度的日志来判断输出哪条日志记录

格式器

Formatter

决定日志记录的最终输出格式

日志器(loggers)是入口,真正工作的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。

Logger类:配置方法和消息发送方法

配置方法

方法

功能描述

Logger.setLevel()

设置记录器将会处理的最低严重级别的日志

Logger.addHandler()

为Logger对象添加一个handler对象

Logger.removeHandler()

为Logger对象移除一个handler对象

Logger.addFilter()

为Logger对象添加一个filter对象

Logger.removeFilter()

为Logger对象移除一个filter对象

消息发送方法

方法

功能描述

Logger.debug(),Logger.info(),Logger.warning(),Logger.error(),Logger.critical(),

创建一个与其方法名对应等级的日志记录

Logger.exception()

创建一个类似与Logger.error()的日志记录

Logger.log()

需要获取一个明确的日志level参数来创建一个日志记录

Handler类:常用配置方法

方法

功能描述

Handler.setLevel()

设置Handler将会处理的最低严重级别的日志

Handler.setFormatter()

为Handler设置一个格式器对象

Handler.addFilter()

为Handler添加一个过滤器对象

Handler.removeFilter()

为Handler移除一个过滤器对象

需要说明的是,应用程序代码不应该直接实例化和使用Handler实例。因为Handler是一个基类,它只定义了素有handlers都应该有的接口,同时提供了一些子类可以直接使用或覆盖的默认行为。下面是一些常用的Handler

Handler

功能描述

logging.FileHandler

将日志消息发送到磁盘文件,默认情况下文件大小会无限

logging.StreamHandler

将消息发送到输出到Stream,如std.out,std.err任 file-like对象,也就是显示在调试终端

logging.handlers.Rotating.FileHandler

将日志消息发送到磁盘文件,并支持日志文件按大小切割

logging.handlers.TimedRotatingFileHandler

将日志消息发送到磁盘文件,并支持日志文件按时间切割

logging.handlers.HTTPHandler

将日志消息以GET或POST的方式发送给一个HTTP服务器

logging.handlers.SMTPHandler

将日志消息发送给一个指定的email地址

logging.handlers.NullHandler

该Handler实例会忽略error messages,通常被想使用logging的library开发者使用来避免'No handlers could be found for logger XXX'信息的出现.

Filter类:可以被Handler和Logger用来做比level更细粒度的、更复杂的过滤功能。

Filter是一个过滤器基类,它只允许某个logger层级下的日志事件通过过滤。

Formater类:用于配置日志信息的最终顺序、结构和内容

Formater对象与logging.Handler基类不同的是,应用代码可以直接实例化Formatter类。另外,如果你的应用程序需要一些特殊的处理行为,也可以实现一个Formatter的子类来完成。

格式

说明

%(levelno)s

打印日志级别的数值

%(levelname)s

打印日志级别的名称

%(pathname)s

打印当前执行程序的路径,其实就是sys.argv[0]

%(filename)s

打印当前执行程序名

%(funcName)s

打印日志的当前函数

%(lineno)d

打印日志的当前行号

%(asctime)s

打印日志的时间

%(thread)d

打印线程ID

%(threadName)s

打印线程名称

%(process)d

打印进程ID

%(message)s

打印日志信息

3、示例

import logging

#创建日志级别

logger = logging.getLogger(__name__)

logger.setLevel(logging.INFO)

#创建日志文件

handler_info = logging.FileHandler('info_log.txt')

handler_info.setLevel(logging.INFO)

handler_warn = logging.FileHandler('warning_log.txt')

handler_warn.setLevel(logging.WARNING)

#定义日志格式

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

handler_info.setFormatter(formatter)

handler_warn.setFormatter(formatter)

#添加到日志记录器中

logger.addHandler(handler_info)

logger.addHandler(handler_warn)

logger.info('information')

logger.warning('warning')

打开'warning_log.txt'文件,输出:

2019-08-23 18:05:25,162 - __main__ - WARNING - warning

打开‘info_log.txt'文件,输出:

2019-08-23 18:05:25,161 - __main__ - INFO - information

2019-08-23 18:05:25,162 - __main__ - WARNING - warning

python日志_python日志处理相关推荐

  1. python处理日志_python日志处理(logging模块)

    文章非原创,搬运自@云游道士博客: 另外,这篇文章可以作为参考: 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logging模块日志流处理流程 使用 ...

  2. python连接linux获取日志_Python 日志记录模块logging的使用

    shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢Python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通 ...

  3. python多线程怎么写日志_Python日志记录在多进程下的使用

    1. 问题描述 项目中,使用RotatingFileHandler根据日志文件大小来切分日志.设置文件的MaxBytes为1GB, backupCount大小为5. 经查看,发现日志文件的大小均小于1 ...

  4. python日志_python 日志模块

    之前项目中用的是工具组做的日志模块,用的久了,脑袋里就懒得思考这是如何实现的.毕竟菊厂的开发,忙成狗,不是我所负责的自然只是看看会用就行了.最近开始奋发图强,自然要好好看下基础的东西. 以前做java ...

  5. python报错输出到日志_Python 日志配置总结

    日志是程序调试的利器,通过日志来解析获取数据,线上问题通过日志分析和定位等,用途多种多样.Python 作为当前常用的一门开发语言,国内很多开发者对其的使用极其粗糙,写法较为随意,受开发者本身熟悉的语 ...

  6. python报错输出到日志_Python日志记录和子进程输出和错误流

    基于Adam Rosenfield's code,你可以 >使用select.select来阻止,直到有要读取的输出 proc.stdout或proc.stderr, >然后读取并记录该输 ...

  7. python 程序停止打印日志_Python日志打印

    简单示例 import sys import ctypes import logging import logging.handlers reload(sys) sys.setdefaultencod ...

  8. python log日志_Python中logging日志的四个等级和使用

    1. logging日志的介绍 在现实生活中,记录日志非常重要,比如:银行转账时会有转账记录:飞机飞行过程中,会有个黑盒子(飞行数据记录器)记录着飞机的飞行过程,那在咱们python程序中想要记录程序 ...

  9. python装饰器函数执行后日志_python 装饰器理解

    在理解装饰器之前,先应该对闭包有个概念:所谓闭包,就是将组成函数的语句和这些语句的执行环境打包在一起时得到的对象,它的主要作用是封存上下文.这一特性可以巧妙的被用于现有函数的包装,从而为现有函数添加功 ...

最新文章

  1. Java JWT:用于Java和Android的JSON Web令牌
  2. C#与西门子PLC通讯
  3. docker镜像常见命令
  4. 笔记本电脑锁_小雷问答丨3000-3500 价格的笔记本电脑怎么选?
  5. Matlab中plot函数绘图基本用法
  6. linux用户登录实验,实验三 Linux系统登录及用户管理
  7. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  8. 因 inode 不足导致数据库登陆报错相关问题
  9. linux内核imx6,imx6ull之linux内核移植
  10. Android Camera 编程从入门到精通
  11. 力扣题目系列:746. 使用最小花费爬楼梯 -- 一道动态规划入门题
  12. Java网络编程第一章
  13. 计算机二级答题技巧口诀,计算机二级考试复习技巧:考场答题经验分享
  14. 牛!这个工具能将公式图片转化为 LaTeX 格式
  15. android 文字大小设计,为什么设计稿的文字大小和开发的不一致
  16. 5、隐私计算--同态加密
  17. 单片机c语言的define,单片机C语言中define的妙用
  18. 华为手机升级回退_华为荣耀手机系统回退
  19. Java使用Poi填充Word表格模板(图片和文字)
  20. 前端H5实现调用麦克风,录音功能

热门文章

  1. java存入数据库是问号_Java插入中文到数据库中文变成问号解决
  2. mysql设置索引树长度_MySQL索引-B+树
  3. python strip_Python3 strip()方法
  4. python3.5中文手册_Python 入门指南 — Python3 中文手册 3.5.2 文档 | 三维部落
  5. php 账号与密码比对,Php - 将密码与root密码进行比较
  6. 关系型数据库,第一!
  7. 2020年8月编程语言排行榜新鲜出炉 - 编程语言世界的假期
  8. 认识 lib 目录里的 .so 文件
  9. 小编带你了解oracle使用索引和不使用索引性能分析
  10. 《怪物猎人》战斗核心设计分析