logging模块简介

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点

1、可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息

2、print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出

日志等级(level)

DEBUG < INFO < WARNING < ERROR < CRITICAL

DEBUG 最详细的日志信息,典型应用场景是 问题诊断

INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作

WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息

CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息

logging模块可以指定日志记录器的日志级别,只有级别大于或等于该指定日志级别的日志记录才会被输出,小于该等级的日志记录将会被丢弃

logger

logger:日志对象,logging模块中最基础的对象,用logging.getLogger(name)方法进行初始化,name可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等

1. 为程序提供记录日志的接口

2. 判断日志所处级别,并判断是否要过滤

3. 根据其日志级别将该条日志分发给不同handler

其常用函数有:

Logger.setLevel() 设置日志级别
Logger.addHandler() 和 Logger.removeHandler() 添加和删除一个Handler
Logger.addFilter() 添加一个Filter

setLevel:设置日志等级

logger=logging.getLogger()
logger.setLevel(logging.DEBUG) #设置日志等级

logging

1、Formatter用于控制日志信息的最终输出格式

logging.Formatter(参数)

formatter=logging.Formatter('[%(asctime)s]-%(filename)s]-%(levelname)s:%(message)s')

%(name)s  Logger的名字

%(levelno)s  数字形式的日志级别

%(levelname)s  文本形式的日志级别

%(pathname)s  调用日志输出函数的模块的完整路径名,可能没有

%(filename)s  调用日志输出函数的模块的文件名

%(module)s  调用日志输出函数的模块名

%(funcName)s  调用日志输出函数的函数名

%(lineno)d  调用日志输出函数的语句所在的代码行

%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示

%(relativeCreated)d  输出日志信息时的,自Logger创建以 来的毫秒数

%(asctime)s  字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

%(thread)d  线程ID。可能没有

%(threadName)s  线程名。可能没有

%(process)d  进程ID。可能没有

%(message)s  用户输出的消息

2、Handler基于日志级别对日志进行分发,如设置为WARNING级别的Handler只会处理WARNING及以上级别的日志。具体的应用如一个应用要把所有的日志打在文件中,并把ERROR以上级别的日志打印到屏幕,把CRITICAL级别的日志发邮件

常用函数有:

setLevel() 设置级别
setFormatter() 设置Formatter

logging.FileHandler(参数)创建一个FileHandler

logger.addHandler(fh)添加

logging.StreamHandler()创建一个 StreamHandler

logger.addHandler(ch)添加

# 创建一个FileHandler,用于写到本地
fh=logging.FileHandler(logname,'a',"utf-8")
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

# 创建一个 StreamHandler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)


import os,time,logging
#日志存放路径
log_path=os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))),'logs')
# 如果不存在这个logs文件夹,就自动创建一个
if not os.path.exists(log_path):os.mkdir(log_path)
class Log():def __init__(self):#再日志路径下添加日志文件名self.logname=os.path.join(log_path,'%s.log'%time.strftime('%Y_%m_%d'))#logger日志对象初始化self.logger=logging.getLogger()#设置日志等级self.logger.setLevel(logging.DEBUG)#日志输出格式self.formatter=logging.Formatter('[%(asctime)s]-%(filename)s]-%(levelname)s:%(message)s')def __console(self,level,message):# 创建一个 FileHandler,用于写到本地fh=logging.FileHandler(self.logname,'a',"utf-8")fh.setLevel(logging.DEBUG)fh.setFormatter(self.formatter)self.logger.addHandler(fh)# 创建一个 StreamHandler,用于输出到控制台ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)ch.setFormatter(self.formatter)self.logger.addHandler(ch)if level=='info':self.logger.info(message)elif level=='debug':self.logger.debug(message)elif level=='warning':self.logger.warning(message)elif level=='error':self.logger.error(message)# 这两行代码是为了避免日志输出重复问题self.logger.removeHandler(ch)self.logger.removeHandler(fh)# 关闭打开的文件fh.close()def debug(self, message):self.__console('debug', message)def info(self, message):self.__console('info', message)def warning(self, message):self.__console('warning', message)def error(self, message):self.__console('error', message)
if __name__ == "__main__":log=Log()log.info("---测试开始---")log.info("操作步骤1,2,3")log.warning("---测试结束---")C:\Users\wangli\PycharmProjects\AutoMation\venv\Scripts\python.exe C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
[2019-04-10 17:17:18,025]-test.py]-INFO:---测试开始---
[2019-04-10 17:17:18,026]-test.py]-INFO:操作步骤1,2,3
[2019-04-10 17:17:18,028]-test.py]-WARNING:---测试结束---Process finished with exit code 0

Python之日志处理(logging模块)详解相关推荐

  1. Python 标准库之 sys 模块详解

    Python sys 模块详解 1. 简介 "sys"即"system","系统"之意.该模块提供了一些接口,用于访问 Python 解释器 ...

  2. python常用内置模块-Python常用内置模块之xml模块(详解)

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  3. Python基础学习之 os 模块详解

    Python基础学习之 os 模块详解 文章目录 Python基础学习之 os 模块详解 1. 路径操作 1.1 os.chdir(),切换当前工作目录: 1.2 os.getcwd(),返回工作目录 ...

  4. python中logging模块详解_python logging日志模块详解

    logging 日志模块详解 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这 ...

  5. python logging模块详解_python logging模块使用总结

    目录 logging模块 日志级别 CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 logging.basicConfig()函数中的具体参数含义 f ...

  6. Python logging模块详解

    1.简单的将日志打印到屏幕 import logginglogging.debug('This is debug message') logging.info('This is info messag ...

  7. Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...

  8. Python的日志记录-logging模块的使用

    一.日志 1.1什么是日志 日志是跟踪软件运行时所发生的事件的一种方法,软件开发者在代码中调用日志函数,表明发生了特定的事件,事件由描述性消息描述,同时还包含事件的重要性,重要性也称为级别或严重性. ...

  9. 【Python】之 os.path 模块详解

    前言: os.path 模块是系统路径操作模块,但实际的原理可以把它认为是处理包含斜杠("/")和反斜杠("\")字符串的模块,其中,斜杠("/&qu ...

  10. python的sys模块有什么用_python sys模块详解

    Python sys 模块详解 1. 简介 "sys"即"system","系统"之意.该模块提供了一些接口,用于访问 Python 解释器 ...

最新文章

  1. Multithreading in Java
  2. shell发送网页邮件
  3. Spring Security 实战干货:实现自定义退出登录
  4. @import注解_Spring 注解之@Import 注入的各种花活
  5. C#为什么多线程控制winform需要用委托?
  6. 明天mbzuai面试的准备,严阵以待
  7. uda 3.C++二维向量
  8. php 小知识随手记 new self() 和new static()作用和区别
  9. 华为音量键只能调通话_华为新全面屏专利曝光,电源键、音量键都没有
  10. mysql4.52_phpMyAdmin 4.5.0.2 发布下载,MySQL 管理工具
  11. SQL错误Duplicate column name 'NAME'名字重复应使用别名
  12. C#.NET分别以GET和POST方式抓取远程页面
  13. oracle+调整+表空间,oracle数据库表空间及权限调整示例
  14. PHP函数: set_time_limit
  15. 如何查看cudnn当前版本_当前版本的花木兰,如何成为边路战神?
  16. Linux——shell脚本的基础篇(变量定义、变量种类、变量操作)
  17. R语言使用pROC包的的plot.roc函数对单变量进行ROC分析并可视化ROC曲线、寻找最佳阈值(threshold、cutoff)、在可视化曲线中添加最佳阈值点
  18. Android TextView、EditText显示输入法自带表情,记录一下
  19. 从零搭建若依环境(非分离版)
  20. 产品打磨日记-给SA交待的任务

热门文章

  1. Java并发编程实战————对象的组合
  2. Java 多线程 —— wait 与 notify
  3. 多线程中 start()和run()方法的区别
  4. 计算机组成原理r型指令logisim实现_第一章 计算机体系结构
  5. 单片机实验:外部中断按键
  6. php url参数时间戳,AJAX GET 请求 URL 最后面缀的那个类似于时间戳的参数是什么啊?...
  7. 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...
  8. 基础练习 FJ的字符串 递推 C++
  9. java.rmi.server.port_java.rmi.server.ExportException: internal error: ObjID already in use报错处理...
  10. linuxpgrepgrep_linux命令:ps pstree pgrep pidof进程管理