Python Logging 模块研究

背景

在一个新的项目里面加入了日志功能,想自己写一个,但是一个偶然的机会,通过google发现Python内建了一个非常强大的日志(log)模块:logging。粗略的研究了一下,下面是我的一些心得札记。

为什么使用日志

追踪程序的一些运行信息,以达到时刻了解程序运行的状况,快速捕获程序的异常,及时发现程序错误的目的

logging模块简介

立即学习“Python免费学习笔记(深入)”;

从Python2.3起,Python的标准库加入了logging模块.logging模块给运行中的应用提供了一个标准的信息输出接口.典型的logging机制实现是把要输出的数据简单地写到一个txt文件中去.写log文件的方式是一种常见的打log的方式,而logging模块提供的更多,它可以把输出信息输出到所有类文件的对象中去,甚至TCP和UDP的sockets,email服务器,Unix的syslog系统,NT系列的事件log系统,内存的buffer和HTTP服务器,当然还有”真正的”文件中去.

引入logging模块:

import logging #import logging module#使用logging模块:class CLog:   #----------------------------------------------------------------------------   def __init__(self):      self.logger = logging.getLogger()      fileHandler = logging.FileHandler(LOG_FILE_PATH)      formatHandler = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')      fileHandler.setFormatter(formatHandler)      self.logger.addHandler(fileHandler)      self.logger.setLevel(logging.NOTSET)      #----------------------------------------------------------------------------   def DebugMessage(self,msg):      self.logger.debug(msg)      pass      oCLog = CLog()

登录后复制

上面定义了一个简单的log模块,我想用这一段简单的代码来描述一下logging模块

logger

获取log的一个实例,这个部分代码分离做得很好,可以通过增加不同的handler来丰富log实例的特性

FileHandler

指定了Log的输出端是文件,通过传入文件路劲来指定输出文件,我们可以为Log定义其他的输出端例如StreamHandler,以及其他各种复杂的输出方式,文件是可能是最常用的方式,其他方式有待慢慢探索

FormatHandler

FomartHandler指定了FileHandler的输出格式,例如我使用了以下的格式:(‘%(asctime)s %(levelname)s: %(message)s’),则输出的文本格式为:

2013-07-25 08:20:01,525 INFO: goodbye [127.0.0.1]:60442

有关format的关键字,例如asctime,levelname,可参考LogRecord attributes 官方文档

Level

Logging模块定义了5种log信息的优先级

LevelWhen it’s used

DEBUGDetailed information, typically of interest only when diagnosing problems.

INFOConfirmation that things are working as expected.

WARNINGAn indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.

ERRORDue to a more serious problem, the software has not been able to perform some function.

CRITICALA serious error, indicating that the program itself may be unable to continue running.

优先级关系:

DEBUG

可以根据 self.logger.debug(msg),self.logger.info(msg),等函数来确定输出信息的优先级

SetLevel

SetLevel函数定义了Log实例对处理log信息的优先级,如果定义的优先级为info,则所有debug的信息都将忽略,不输出到输出端,只输入设定优先级以及设定优先级以上的信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2283662.html

(0)
上一篇 2025年2月27日 20:18:02
下一篇 2025年2月24日 07:20:12

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 你所不知道的python 循环中的else

    众多语言中都有if else这对条件选择组合,但是在python中还有更多else使用的地方,比如说循环for,或者while都可以和else组合。 下面简单介绍一下for-else while-else组合 循环组合中的else执行的情况…

    编程技术 2025年2月27日
    100
  • Python全局变量与局部变量详解

    python全局变量与局部变量详解 #Python中的变量:全局变量和局部变量  #在很多语言中,在声明全局变量的时候,都喜欢把全局变量的名称定义为大写  #定义学生人数为100STUDENT_NUMBER = 100#学校名称SCHOOL…

    编程技术 2025年2月27日
    200
  • Python的类实例属性访问规则

    一般来说,在python中,类实例属性的访问规则算是比较直观的。 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此。 在这里,我们需要明白以下几个地方: 1.Python是一门动态语言,任何实体都可以动态地添…

    编程技术 2025年2月27日
    200
  • python encode和decode的妙用

    字符串解码: 有个字符串: ‘\u4fee\u6539\u8282\u70b9\u72b6\u6001\u6210\u529f’ 想转换为: u”u4feeu6539u8282u70b9u72b6u600…

    编程技术 2025年2月27日
    200
  • Python实用技巧总结

    以下是我近些年收集的一些python实用技巧和工具,希望能对你有所帮助。 交换变量 x = 6 y = 5 x, y = y, x 立即学习“Python免费学习笔记(深入)”; print x >>> 5 print y…

    编程技术 2025年2月27日
    200
  • Python yield 使用浅析

    您可能听说过,带有 yield 的函数在 python 中被称之为 generator(生成器),何谓 generator ?   我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。   如何生成斐波那契數列 …

    编程技术 2025年2月27日
    200
  • 利用Python的SocketServer框架编写网络服务程序

    1.前言: 虽说用Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时SocketServer模块也…

    编程技术 2025年2月27日
    200
  • python数据类型转换

    python类型转换 函数                      描述   int(x [,base ])         将x转换为一个整数   long(x [,base ])        将x转换为一个长整数   float(x…

    编程技术 2025年2月27日
    200
  • Python的字符串索引和分片

    1.字符串的索引 给出一个字符串,可输出任意一个字符,如果索引为负数,就是相当于从后向前数。 >>> str=”HelloWorld!” >>> print str[0] H 立即…

    编程技术 2025年2月27日
    200
  • python None与Null 的区别

    一、python对象 要理解这个,首先要理解Python对象: python对象具有三个特性:身份、类型、值。 三特性在对象创建时被赋值。只有值可以改变,其他只读。 类型本身也是对象。 立即学习“Python免费学习笔记(深入)”; 二、N…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论