配景

在一个新的项目内里插手了日志成果,想本身写一个,可是一个偶尔的时机,通过google发明Python内建了一个很是强大的日志(log)模块:logging。大致的研究了一下,下面是我的一些心得札记。

为什么利用日志

追踪措施的一些运行信息,以到达时刻相识措施运行的状况,快速捕捉措施的异常,实时发明措施错误的目标

logging模块简介

从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 < INFO < WARNING < ERROR < CRITCAL

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

SetLevel

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

Python教程

2017-11-02


配景在一个新的项目内里插手了日志成果,想本身写一个,可是一个偶尔的时机,通过google发明Python内建了一个很是强大的日志(log)模块:l...