python之logging模块

# 解释下面这段代码

import logging  
from logging import handlers

log_file_path='./lstmtest_trainmodel.log'


# logging.basicConfig(),声明logging
# 日志格式
# 	%(asctime)s		打印日志的时间
# 	%(filename)s[line:%(lineno)d]	打印当前程序执行名
#		[line:%(lineno)d]	这不知道是干嘛的,可能是固定写法
#	%(levelname)s	打印日志级别名称
#	%(message)s		打印日志信息
# filemode也是一个常用的参数,不设的话默认为’a’,即追加模式;
# 	也可以设为’w’,那么每次写日志会覆盖之前的日志。
logging.basicConfig(level=logging.DEBUG,  
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
                    datefmt='%Y-%m-%d %H:%M:%S',  
                    filename=log_file_path,  
                    filemode='a')  
formatter2 = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s') 


# TimedRotatingFileHandler,单进程下可直接实现日志按时间切割

# 实例化TimedRotatingFileHandler
# interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
    # S 秒
    # M 分
    # H 小时、
    # D 天、
    # W 每星期(interval==0时代表星期一)
    # midnight 每天凌晨
trfh = handlers.TimedRotatingFileHandler(filename=log_file_path,when='D',backupCount=100,encoding='utf-8')
trfh.setFormatter(formatter2)
logging.getLogger().addHandler(trfh)

简介

logging模块是Python内置的标准模块,

主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;

相比print,具备如下优点:

  • 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

  • print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

组件

在python中,logging由logger,handler,filter,formater四个部分组成,

  • logger是提供我们记录日志的方法;
  • handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler;
  • filter是给用户提供更加细粒度的控制日志的输出内容;
  • formater用户格式化输出日志的信息。

配置logging的三种方式

# 第一种:基础配置,
logging.basicConfig(filename="config.log",filemode="w",format="%(asctime)s-%(name)s-%(levelname)s-%(message)s",level=logging.INFO)# 第二种:使用配置文件的方式配置logging,使用函数来读取配置文件。
fileConfig(filename,defaults=None,disable_existing_loggers=Ture )

# 第三种:使用一个字典方式来写配置信息,然后使用函数来瓦按成logging的配置.
dictConfig(dict,defaults=None, disable_existing_loggers=Ture )

level

日志一共分成5个等级,从低到高分别是:DEBUG ,INFO ,WARNING ,ERROR, CRITICAL。

  • DEBUG:详细的信息,通常只出现在诊断问题上

  • INFO:确认一切按预期运行

  • WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。

  • ERROR:更严重的问题,软件没能执行一些功能

  • CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行

这5个等级,也分别对应5种打日志的方法: debug 、info 、warning 、error 、critical。默认的是WARNING,当在WARNING或之上时才被跟踪。

日志输出:可以输出在控制台/文件

  1. StreamHandler:logging.StreamHandler;日志输出到流,可以是sys.stderr,sys.stdout或者文件

  2. FileHandler:logging.FileHandler;日志输出到文件

  3. BaseRotatingHandler:logging.handlers.BaseRotatingHandler;基本的日志回滚方式

  4. RotatingHandler:logging.handlers.RotatingHandler;日志回滚方式,支持日志文件最大数量和日志文件回滚

    日志回滚的意思为:比如日志文件是chat.log,当chat.log达到指定的大小之后,RotatingFileHandler自动把文件改名为chat.log.1。不过,如果chat.log.1已经存在,会先把chat.log.1重命名为chat.log.2。最后重新创建 chat.log,继续输出日志信息。【这样保证了chat.log里面是最新的日志】

  5. TimeRotatingHandler:logging.handlers.TimeRotatingHandler;日志回滚方式,在一定时间区域内回滚日志文件

  6. TimedRotatingFileHandler:单进程下可直接实现日志按时间切割

  7. SocketHandler:logging.handlers.SocketHandler;远程输出日志到TCP/IP sockets
    DatagramHandler:logging.handlers.DatagramHandler;远程输出日志到UDP sockets
    SMTPHandler:logging.handlers.SMTPHandler;远程输出日志到邮件地址
    SysLogHandler:logging.handlers.SysLogHandler;日志输出到syslog
    NTEventLogHandler:logging.handlers.NTEventLogHandler;远程输出日志到Windows NT/2000/XP的事件日志
    MemoryHandler:logging.handlers.MemoryHandler;日志输出到内存中的指定buffer
    HTTPHandler:logging.handlers.HTTPHandler;通过"GET"或者"POST"远程输出到HTTP服务器

日志格式说明

logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息:

%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息

我在工作中给的常用格式在前面已经看到了。就是:

format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s’

这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。

转载自:
https://blog.csdn.net/qq_30758629/article/details/80840230
https://zhuanlan.zhihu.com/p/337456603

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值