Python中logging日志库实例详解

logging的简单使用

用作记录日志,默认分为六种日志级别(括号为级别对应的数值)

  1. NOTSET(0)
  2. DEBUG(10)
  3. INFO(20)
  4. WARNING(30)
  5. ERROR(40)
  6. CRITICAL(50)

special

  • 在自定义日志级别时注意不要和默认的日志级别数值相同
  • logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO、WARNING、ERROR、CRITICAL 级别的日志都会输出。

|2logging常见对象

  • Logger:日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定哪些日志有效。
  • LogRecord :日志记录器,将日志传到相应的处理器处理。
  • Handler :处理器, 将(日志记录器产生的)日志记录发送至合适的目的地。
  • Filter :过滤器, 提供了更好的粒度控制,它可以决定输出哪些日志记录。
  • Formatter:格式化器, 指明了最终输出中日志记录的格式。

|3logging基本使用

logging 使用非常简单,使用 basicConfig() 方法就能满足基本的使用需要;如果方法没有传入参数,会根据默认的配置创建Logger 对象,默认的日志级别被设置为 WARNING,该函数可选的参数如下表所示。


参数名称


参数描述


filename


日志输出到文件的文件名


filemode


文件模式,r[+]、w[+]、a[+]


format


日志输出的格式


datefat


日志附带日期时间的格式


style


格式占位符,默认为 "%" 和 “{}”


level


设置日志输出级别


stream


定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常


handles


定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常

logging代码

 logging.debug("debug")
 logging.info("info")
 logging.warning("warning")
 logging.error("error")5 logging.critical("critical")

测试结果

WARNING:root:warning
ERROR:root:error
CRITICAL:root:critical

但是当发生异常时,直接使用无参数的 debug() 、 info() 、 warning() 、 error() 、 critical() 方法并不能记录异常信息,需要设置 exc_info=True 才可以,或者使用 exception() 方法,还可以使用 log() 方法,但还要设置日志级别和 exc_info 参数

a = 5
 b = 0
 try:
 c = a / b
 except Exception as e:
 # 下面三种方式三选一,推荐使用第一种
 logging.exception("Exception occurred")
 logging.error("Exception occurred", exc_info=True)
 logging.log(level=logging.ERROR, msg="Exception occurred", exc_info=True)

|4logging之Formatter对象

Formatter 对象用来设置具体的输出格式,常用格式如下表所示


格式


变量描述


%(asctime)s


将日志的时间构造成可读的形式,默认情况下是精确到毫秒,如 2018-10-13 23:24:57,832,可以额外指定 datefmt 参数来指定该变量的格式


%(name)


日志对象的名称


%(filename)s


不包含路径的文件名


%(pathname)s


包含路径的文件名


%(funcName)s


日志记录所在的函数名


%(levelname)s


日志的级别名称


%(message)s


具体的日志信息


%(lineno)d


日志记录所在的行号


%(pathname)s


完整路径


%(process)d


当前进程ID


%(processName)s


当前进程名称


%(thread)d


当前线程ID


%threadName)s


当前线程名称

|5logging封装类

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
 __title__ = logging工具类
 __Time__ = 2019/8/8 19:26
 """
 import logging
 from logging import handlers
 class Loggers:
  __instance = None
  def __new__(cls, *args, **kwargs):
   if not cls.__instance:
    cls.__instance = object.__new__(cls, *args, **kwargs)
   return cls.__instance
  def __init__(self):
   # 设置输出格式
   formater = logging.Formatter(
    '[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] : %(message)s')
   # 定义一个日志收集器
   self.logger = logging.getLogger('log')
   # 设定级别
   self.logger.setLevel(logging.DEBUG)
   # 输出渠道一 - 文件形式
   self.fileLogger = handlers.RotatingFileHandler("./test.log", maxBytes=5242880, backupCount=3)
   # 输出渠道二 - 控制台
   self.console = logging.StreamHandler()
   # 控制台输出级别
   self.console.setLevel(logging.DEBUG)
   # 输出渠道对接输出格式
   self.console.setFormatter(formater)
   self.fileLogger.setFormatter(formater)
   # 日志收集器对接输出渠道
   self.logger.addHandler(self.fileLogger)
   self.logger.addHandler(self.console)
  def debug(self, msg):
   self.logger.debug(msg=msg)
  def info(self, msg):
   self.logger.info(msg=msg)
  def warn(self, msg):
   self.logger.warning(msg=msg)
  def error(self, msg):
   self.logger.error(msg=msg)
  def excepiton(self, msg):
   self.logger.exception(msg=msg)
 loggers = Loggers()
 if __name__ == '__main__':
  loggers.debug('debug')
  loggers.info('info')

|6logzero封装类

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 """
 __title__ = logzero日志封装类
 __Time__ = 2019/8/8 19:26
 """
 import logging
 import logzero
 from logzero import logger
 class Logzero(object):
  __instance = None
  def __new__(cls, *args, **kwargs):
   if not cls.__instance:
    cls.__instance = object.__new__(cls, *args, **kwargs)
   return cls.__instance
  def __init__(self):
   self.logger = logger
   # console控制台输入日志格式 - 带颜色
   self.console_format = '%(color)s' \
        '[%(asctime)s]-[%(levelname)1.1s]-[%(filename)s]-[%(funcName)s:%(lineno)d] 日志信息: %(message)s ' \
        '%(end_color)s '
   # 创建一个Formatter对象
   self.formatter = logzero.LogFormatter(fmt=self.console_format)
   # 将formatter提供给setup_default_logger方法的formatter参数
   logzero.setup_default_logger(formatter=self.formatter)
   # 设置日志文件输出格式
   self.formater = logging.Formatter(
    '[%(asctime)s]-[%(levelname)s]-[%(filename)s]-[%(funcName)s:%(lineno)d] 日志信息: %(message)s')
   # 设置日志文件等级
   logzero.loglevel(logging.DEBUG)
   # 输出日志文件路径和格式
   logzero.logfile("F:\\imocInterface\\log/tests.log", formatter=self.formater)
  def debug(self, msg):
   self.logger.debug(msg=msg)
  def info(self, msg):
   self.logger.info(msg=msg)
  def warning(self, msg):
   self.logger.warning(msg=msg)
  def error(self, msg):
   self.logger.error(msg=msg)
  def exception(self, msg):
   self.logger.exception(msg=msg)
 logzeros = Logzero()
 if __name__ == '__main__':
  logzeros.debug("debug")
  logzeros.info("info")
  logzeros.warning("warning")
  logzeros.error("error")
  a = 5
  b = 0
  try:
   c = a / b
  except Exception as e:
   logzeros.exception("Exception occurred")

总结

以上所述是小编给大家介绍的Python中logging日志库实例详解,希望对大家有所帮助,也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Python使用logging模块实现打印log到指定文件的方法

    本文实例讲述了Python使用logging模块实现打印log到指定文件的方法.分享给大家供大家参考,具体如下: 可能我们经常会使用print来输出信息到窗口,但当我们有很多个py文件需要运行,项目比较庞大的到时候,print简直就是太low了点了.那么我们可以使用强大的logging模块,把输出到指定的本地pc某个路径的文件中. 一.logging的框架 1. Loggers: 可供程序直接调用的接口,app通过调用提供的api来记录日志 2. Handlers: 决定将日志记录分配至正确的目

  • python 通过logging写入日志到文件和控制台的实例

    如下所示: import logging # 创建一个logger logger = logging.getLogger('mylogger') logger.setLevel(logging.DEBUG) # 创建一个handler,用于写入日志文件 fh = logging.FileHandler('test.log') fh.setLevel(logging.DEBUG) # 再创建一个handler,用于输出到控制台 ch = logging.StreamHandler() ch.set

  • python中 logging的使用详解

    日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分. 根据事件的轻重可分为以下几个级别: DEBUG: 详细信息,通常仅在诊断问题时才受到关注.整数level=10 INFO: 确认程序按预期工作.整数level=20 WARNING:出现了异常,但是不影响正常工作.整数level=30 ERROR:由于某些原因,程序 不能执行某些功能.整数level=40 CRITICAL:严重的错误,导致程序不能运行.整数

  • 详解Python logging调用Logger.info方法的处理过程

    本次分析一下Logger.info的流程 1. Logger.info源码: def info(self, msg, *args, **kwargs): """ Log 'msg % args' with severity 'INFO'. To pass exception information, use the keyword argument exc_info with a true value, e.g. logger.info("Houston, we h

  • Python中logging日志库实例详解

    logging的简单使用 用作记录日志,默认分为六种日志级别(括号为级别对应的数值) NOTSET(0) DEBUG(10) INFO(20) WARNING(30) ERROR(40) CRITICAL(50) special 在自定义日志级别时注意不要和默认的日志级别数值相同 logging 执行时输出大于等于设置的日志级别的日志信息,如设置日志级别是 INFO,则 INFO.WARNING.ERROR.CRITICAL 级别的日志都会输出. |2logging常见对象 Logger:日志,

  • python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算.         Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是大多数人所熟悉的模型,而不是程序员熟悉的模型,即大多数计算机硬件实现的 IEEE 浮点数运算.Decimal 实例可以准确地表示任何数,对其上取整或下取整,还可以对有效数字个数加以限制. Decimal 小数值表示为 Decimal 类的实例.构造函数取一个整数或字符串作为参数.使用

  • python中的unittest框架实例详解

    在python中我们学习了不少理论知识,那么对相关的程序进行测试,就显得很重要了.本篇要讲的是unittest框架,我们可以用它来做一些测试工作,又或者是相关代码的编写.下面我们就unittest框架的说明.特性和4种字模块分别带来介绍,大家一起来看具体内容. 1.unittest说明 unittest是Python自带的单元测试框,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件,可以用来作自动化测试框架的用例组织执行框架. 2.unittest框架特性 (1)提供用例组织与执行:

  • Python 中迭代器与生成器实例详解

    Python 中迭代器与生成器实例详解 本文通过针对不同应用场景及其解决方案的方式,总结了Python中迭代器与生成器的一些相关知识,具体如下: 1.手动遍历迭代器 应用场景:想遍历一个可迭代对象中的所有元素,但是不想用for循环 解决方案:使用next()函数,并捕获StopIteration异常 def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: br

  • Python中的Django基本命令实例详解

    一.新建项目 $django-admin.py  startproject  project_name # 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.py 试试 注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b. 二.新建APP 要先进入项目目录下,cd project_name 然后执行下面的命令: $ python manage.py startapp app_nam

  • Python中的pathlib库使用详解

    目录 1. pathlib库介绍 2. pathlib库下Path类的基本使用 2.1 获取文件名 2.2 获取文件前缀和后缀 2.3 获取文件的文件夹及上一级.上上级文件夹 2.4 获取该文件所属的文件夹及其父文件夹 2.5 文件绝对路径 2.6 获取当前工作目录 2.7 获取用户 2.8 获取文件详细信息 2.9 检查目录或者文件是否存在 2.10 检查指定指定路径是否为folder或者file 2.11 将相对路径转换为绝对路径 2.12 遍历一个目录 2.13 获取所有符合pattern

  • python数据可视化plt库实例详解

    先看下jupyter和pycharm环境的差别 左边是jupyter----------------------------------------------------------右边是pycharm 以下都是使用pycharm环境 1.一个窗口画出一个线性方程 import numpy as np import matplotlib.pyplot as plt x = np.linspace(0,1,11)# 从0到1,个数为11的等差数列 print(x) y = 2*x plt.plo

  • Django logging日志模块实例详解(日志记录模板配置)

    目录 一.Django日志 二.Logger 记录器 Django 内置记录器 三.Handler 处理程序 Logging 自身携带Handler 四.Filter过滤器 五.Formatters格式化器 六:Django 集成日志logginger 模块 总结 一.Django日志 Django使用python内建的logging模块打印日志,Python的logging配置由四个部分组成: 1>.记录器(Logger) 2>.处理程序(Handler) 3>.过滤器(Filter)

  • python中urllib模块用法实例详解

    本文实例讲述了python中urllib模块用法.分享给大家供大家参考.具体分析如下: 一.问题: 近期公司项目的需求是根据客户提供的api,我们定时去获取数据, 之前的方案是用php收集任务存入到redis队列,然后在linux下做一个常驻进程跑某一个php文件, 该php文件就一个无限循环,判断redis队列,有就执行,没有就break. 二.解决方法: 最近刚好学了一下python, python的urllib模块或许比php的curl更快,而且简单. 贴一下代码 复制代码 代码如下: #

  • python中字典(Dictionary)用法实例详解

    本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映射结构的数据类型,由无序的"键-值对"组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 >>> dict1={} #建立一个空字典 >>> type(dict1) <type 'dict'> 2.增加字典元素:两种方法 >>&g

随机推荐