爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15205|回复: 4

[源代码] python之日志logging的使用

[复制链接]

新浪微博达人勋

发表于 2020-12-11 14:25:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
一、“日志”的来源

刚开始学编程的时候,为了了解程序中间的状态,例如变量是什么样,或者报错的行出了什么状况,都会使用print,把关键信息打印出来看。
对于已经打包的软件,如果运行时报错了,一般是不会在屏幕上显示报错信息的,
即便弹出个窗口显示了,也可能被一头雾水的使用者随手关掉,
软件运行中的信息是保存在“日志”文件中的,程序员会在日志中查询信息以便确认bug,这就是“日志”的来源。
而python的日志功能是其内置标准库:logging模块
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-12-11 14:38:45 | 显示全部楼层
二、logging级别

logging模块有6个级别:
日志级别-数字型 日志级别-文本型
0 NOTSET
10 DEBUG
20 INFO
30 WARNING
40 ERROR
50 CRITICAL


级别的用法:先将自己的日志定一个级别xx,作为界限,
logging发出的信息的级别≥xx,将在屏幕显示
logging发出的信息的级别<xx,将略过
默认级别是warning


程序示例:

import logging
print(logging.NOTSET) #0
print(logging.DEBUG) #10
print(logging.INFO) #20
print(logging.WARNING) #30
print(logging.ERROR) #40
print(logging.CRITICAL) #50

logging.debug('天气晚来秋') #级别低于warning,不显示
logging.info('明月松间照') #级别低于WARNING,不显示
logging.warning('清泉石上流') #WARNING:root:清泉石上流
logging.error('苟富贵') #ERROR:root:苟富贵
logging.critical('勿相忘') #CRITICAL:root:勿相忘


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-12-11 14:58:57 | 显示全部楼层
三、logging的用法

logging最简单的用法是logging.basicConfig([**kwargs])
其中参数如下:

参数
说明
filename
日志文件
filemode
日志文件打开方式,'a'或'w'
format
指定日志文件显示格式
datefmt
日期时间格式
level
设置rootlogger日志级别
stream
用指定的stream创建StreamHandler,可指定输出到sys.stderr,sys.stdout或文件,默认为sys.stderr。若同时列出filename和stream,stream会被忽略

以上format可能用的格式化串:

format参数值
s字符串,d整数,f浮点
说明
%(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
当前时间,字符串型如"2020-12-11 10:59:21,562"
%(thread)d
线程ID
%(threadName)s
线程名
%(process)d
进程ID
%(message)s
用户输出的信息

datefmt值的写法:

datefmt
说明
%Y
年的“长格式”,如1999
%y
年的短格式,如99
%m

%d

%H
小时0-23
%w
星期0-6,周日=0
%M
分钟
%S



程序示例:

import logging
#每条日志的格式,其中12s,8s,10s不知道是啥?
logFormat = '%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s'
#日志文件目录:
logFileName = r'C:\Users\Administrator\Desktop\testLog.txt'
logging.basicConfig(level = logging.INFO,#低于该等级不显示
format = logFormat,
               filename = logFileName,
               filemode = 'w')#常识:w覆盖,a追加
logging.debug('xxxx1')#debug等级低于info,不显示
logging.info('xxxx2')
logging.warning('xxxx3')
logging.error('xxxx4')
logging.critical('xxxx5')


于是,在桌面生成了日志文件:testLog.txt,内容为:
2020-12-11 14:47:41,293 INFO     root       xxxx2      
2020-12-11 14:47:41,293 WARNING  root       xxxx3      
2020-12-11 14:47:41,293 ERROR    root       xxxx4      
2020-12-11 14:47:41,293 CRITICAL root       xxxx5  


总结:
一个小小的日志,一大堆东西,看着脑壳痛,依案例,照葫芦画瓢,能用就行

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-12-11 15:28:34 | 显示全部楼层
四、日志模块调用

为简便,可以自己设置好一个可心的日志模板,调用之即可

import logging
import getpass
import sys

class MyLog(object):
   def __init__(self):
      user = getpass.getuser()
      self.logger = logging.getLogger(user)
      self.logger.setLevel(logging.DEBUG)
      logFile = r'C:\Users\Administrator\Desktop\日志.log' formatter = logging.Formatter('%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s')

      '''日志显示到屏幕上并输出到日志文件内'''
      logHand = logging.FileHandler(logFile)
      logHand.setFormatter(formatter)
      logHand.setLevel(logging.ERROR) logHandSt = logging.StreamHandler()
      logHandSt.setFormatter(formatter)

      self.logger.addHandler(logHand)
      self.logger.addHandler(logHandSt)

   ''' 日志的5个级别对应以下的5个函数 '''
   def debug(self,msg):
      self.logger.debug(msg)

   def info(self,msg):
      self.logger.info(msg)

   def warn(self,msg):
      self.logger.warn(msg)

   def error(self,msg):
      self.logger.error(msg)

   def critical(self,msg):
      self.logger.critical(msg)

if __name__ == '__main__':
   mylog = MyLog()
   mylog.debug("I'm debug")
   mylog.info("I'm info")
   mylog.warn("I'm warn")
   mylog.error("I'm error")
   mylog.critical("I'm critical")


日志中:
2020-12-11 15:23:32,884 ERROR    Administrator I'm error   
2020-12-11 15:23:32,884 CRITICAL Administrator I'm critical


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-22 14:42:11 | 显示全部楼层
赞!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表