基本用法:
import logging#初始化logger 对象
logger = logging.getLogger("main")
#设置logger对象基础级别,后面的handle的级别是基于此级别上的:及如果基础级别为 warning,则后面的handle最小级别就是handle了;如果基础是info,后面handle的级别是warning,则是warning
logger.setLevel(logging.WARNING)# 建立一个filehandler来把日志记录在文件里,级别为debug以上
filehandle = logging.FileHandler("test.log")
filehandle.setLevel(logging.DEBUG)# 建立一个streamhandler来把日志打在CMD窗口上,级别为info以上
consolehandle = logging.StreamHandler()
consolehandle.setLevel(logging.INFO)# 分别为两个handle设置日志格式
formatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s")
filehandle.setFormatter(formatter)
consolehandle.setFormatter(formatter)#将两个handler添加在logger对象中
logger.addHandler(consolehandle)
logger.addHandler(filehandle)# 开始打日志
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

注:

1. logger:提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

2. handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

3. filter:提供一种优雅的方式决定一个日志记录是否发送到handler。

4. formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

5. format:定义了最终log信息的顺序,结构和内容:
%(message)s', '%Y-%m-%d %H:%M:%S'
%(name)s Logger的名字
%(levelname)s 文本形式的日志级别
%(message)s 用户输出的消息
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(levelno)s 数字形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s  调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
===========================================================
当一个项目比较大的时候,不同的文件中都要用到Log,可以考虑将其封装为一个类来使用:
class Logger(object):def __init__(self,loggerName,fileLog):basic_level = logging.DEBUGconsole_level = logging.INFOfile_level = logging.INFOformatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s")self.logger = logging.getLogger(loggerName)self.logger.setLevel(basic_level)file_handle = logging.FileHandler(fileLog)file_handle.setLevel(file_level)file_handle.setFormatter(formatter)console_handle = logging.StreamHandler()console_handle.setLevel(console_level)console_handle.setFormatter(formatter)self.logger.addHandler(file_handle)self.logger.addHandler(console_handle)def debug(self, message):self.logger.debug(message)def info(self, message):self.logger.info(message)def warn(self, message):self.logger.warn(message)def error(self, message):self.logger.error(message)def critical(self, message):self.logger.critical(message)if __name__ == '__main__':import datetimedt = datetime.datetime.now()logfilename = "../logs/test_%s.log" % dt.strftime('%Y%m%d')logger = Logger("Python.utils.Log",logfilename)logger.debug("this is a test for debug")logger.info("this is a test for info")logger.warn("this is a test for warn")logger.error("this is a test for error")

在另外一个 .py 文件里,只要导入这个模块,并实例化类 Logger 就可以在整个project 范围内 输出日志了。
另外注意一点的是:自定义Logger类可以和 logging 混合运用,也可以在整个project 范围内用。但有一点要注意的是 当自定义Logger类和 logging 混用,在实例化logger时 ( = logging.getLogger(loggerName) ) loggerName 要有一个规范: 就是必需有层级关系,譬如 按照 project.package.module的 形式, 当在不同的 py文件 中 loggerName 中的 project 是一样时,
都可以用logger 来输出日志。譬如 在 main.py 中 = logging.getLogger("pytest.test.main") 以及另外一个文件中的 =logging.getLogger("pytest.utils.ApiTestRunner")
参考:

http://www.jb51.net/article/88449.htm

转载于:https://www.cnblogs.com/tomweng/p/6609959.html

Python logging 学习相关推荐

  1. python logging学习

    虽然在别人看起来很简单,但对我来讲logging还是有点复杂,看网络上的解释看不懂.自己学习了一下这个视频:[Python之日志处理-logging模块使用教程],懂了一点,记录于此. [该模块功能的 ...

  2. Python语言学习之字母L开头函数使用集锦:logging日志用法之详细攻略

    Python语言学习之字母L开头函数使用集锦:logging日志用法之详细攻略 目录 logging日志用法之详细攻略 logging日志用法之详细攻略 K Llogging.basicConfig( ...

  3. python自学流程-Python系统学习流程图,教你一步步学习python

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  4. 用python设计一个管理系统思路_Python大佬一个月打造的Python系统学习流程图!

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  5. python logging模块使用教程

    格式化配置: logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s [%(lin ...

  6. python logging 控制其他模块等级_Python常用模块:logging模块介绍

    简单使用 #!/usr/local/bin/python# -*- coding:utf-8 -*-import logginglogging.debug('debug message')loggin ...

  7. python logging默认情况下打印_python logging日志打印过程解析

    一. 基础使用 1.1 logging使用场景 日志是什么?这个不用多解释.百分之九十的程序都需要提供日志功能.Python内置的logging模块,为我们提供了现成的高效好用的日志解决方案.但是,不 ...

  8. python逻辑运算的一些流程图_Python大牛历时一个月打造的Python系统学习流程图,超详细!...

    对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Pytho ...

  9. python tensorflow学习笔记(六)最小二乘法

    说明:本文不包括TensorFlow相关内容 概念 概念:回归分析 回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法.运用十分广泛,回归 ...

最新文章

  1. golang socket读写同时_epoll在Golang的应用
  2. SVN工具的使用 和在Eclipse中安装GPD插件:(多步审批流,因此选择使用工作流(JBPM)来实现)...
  3. java throwable用法_java – ExceptionHandler不能与Throwable一起使用
  4. android访问java服务器_Android_post访问java服务器端
  5. linux 端口qos,linux的qos机制 - cgroup篇 (2)
  6. jdk8 Arrays.sort()实现分析
  7. ES7新特性_介绍--JavaScript_ECMAScript_ES6-ES11新特性工作笔记047
  8. 博时基金的大数据平台建设之道
  9. 深度学习:卷积神经网络之移动网络(MobileNet)
  10. python 数据结构包括三方面_Python数据结构:数据框
  11. 计算机网络系统技术交底,公共广播系统技术交底
  12. 非360手柄玩游戏视角颠倒的解决方案
  13. 【转】Windows Server 2003删除IE
  14. 计算机排查方法,电脑开不了机问题排查方法图解(硬件排查)
  15. 矩阵特征值和特征向量的求取
  16. 三小时学会css(菜鸟教程精华版)【中】
  17. 项目规范,介绍,规划与搭建,模块化开发,网站favicon,网站TDK
  18. 不小心点了计算机一键还原怎么操作,教你电脑一键还原怎么操作
  19. 软件测试智能化 优势,陈耿-软件测试的智能化之路-基于模型的测试实践.pdf
  20. Fe3O4@SiO2硅包铁核壳纳米颗粒|链霉亲和素修饰的四氧化三铁颗粒|正硅酸乙酯(TEOS)进修饰改性磁性Fe3O4纳米颗粒

热门文章

  1. 通过日志恢复MSSQL数据例子
  2. VS2008 快捷键 大全
  3. 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法
  4. FileOutputStreamTest
  5. 使用 angular directive 和 json 数据的 D3 带标签 donut chart示例
  6. java resultset转json_ResultSet到JSON的最有效转换?
  7. 零宽断言 python_正则表达式-零宽断言
  8. 计算机二级 java和web_2020年全国计算机二级WEB程序复习知识点:JavaBean
  9. 闪退没由报错_关于floor()报错注入,你真的懂了吗?
  10. Linux基础知识之用户和用户组以及 Linux 权限管理