python日志logging的用法

python——日志模块


      当开发完后部署,需要对运行过程中的状态进行记录,方便排查问题;因此,日志是非常有必要的,python中自带的logging模块,可以满足开发中的大部分需求。

日志的类别

日志级别描述
DEBUG最详细的日志信息,典型应用场景是问题诊断
INFO信息详细程度仅次于DEBUG,通常只记录关键节点信息
WARNING当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL当发生严重错误,导致运用程序不能继续运行时记录的信息

python中的具体用法

      python中的日志是全局模型存在的,新建好了一个日志后,可以根据该日志对应的文件名字在其他脚本中获取,同时可以根据时间、日志数量或大小进行分多文件记录,下面通过代码进行简要的展示。
不分文件

import logging
import os
# 日志记录时的时间格式
message_format  = '%(asctime)s %(levelname)s %(pathname)s(line:%(lineno)d) %(message)s'
def getLog(log_path, filename="single.log"):
    '''
    根据日志文件名称获取日志,如果该日志不存在,则新建一个
    '''
    # 设计日置级别,格式
    log_file = os.path.join(log_path,filename)
    logging.basicConfig(level=logging.INFO,format=message_format)
    #根据日志名称获取对应日志
    log=logging.getLogger(filename)

    if not log.handlers:  #避免重复加载handler
        file= logging.FileHandler(log_file,encoding='utf-8')
        file.setFormatter(logging.Formatter(message_format))
        log.addHandler(file)
    return log
log = getLog(".", "mylog.txt")
log.debug("This is a debug log.")
log.info("This is a info log.")
log.warning("This is a warning log.")
log.error("This is a error log.")
log.critical("This is a critical log.")

保存的内容如下:

2024-04-19 20:04:10,964 INFO /tmp/ipykernel_43817/3086240563.py(line:23) This is a info log.
2024-04-19 20:04:10,965 WARNING /tmp/ipykernel_43817/3086240563.py(line:24) This is a warning log.
2024-04-19 20:04:10,966 ERROR /tmp/ipykernel_43817/3086240563.py(line:25) This is a error log.
2024-04-19 20:04:10,967 CRITICAL /tmp/ipykernel_43817/3086240563.py(line:26) This is a critical log.

其中debug没有打印出来,原因是当前日志级别为INFO,而DEBUG比它小,所以被忽略了。
日志级别排名如下:

  • DEBUG

  • INFO

  • NOTICE

  • WARNING

  • ERROR

  • CRITICAL

  • ALERT

  • EMERGENCY

    按时间进行多文件记录

# 日志记录时的时间格式
message_format  = '%(asctime)s %(levelname)s %(pathname)s(line:%(lineno)d) %(message)s'
def getTimeLog(log_path, filename="time.log",when="S"):
 	   # 参数when的选择范围如下:
       # S - Seconds
       # M - Minutes
       # H - Hours(默认)
       # D - Days
       # midnight - roll over at midnight
       # W{0-6} - roll over on a certain day; 0 - Monday
   log_file = os.path.join(log_path,filename)
   logging.basicConfig(level=logging.INFO,format=message_format)
   log = logging.getLogger(filename)
   if not log.handlers:
       file =logging.handlers.TimedRotatingFileHandler(log_file,when=when,encoding='utf-8')
       file.setFormatter(logging.Formatter(message_format))
       log.addHandler(file)
   return log

按文件大小、数量进行多文件记录

message_format  = '%(asctime)s %(levelname)s %(pathname)s(line:%(lineno)d) %(message)s'
def getFileSizeLog(log_path, filename="size.log",filesize=100*1024*1024,backupCount=30):
  '''
  filesize:单个日志文件最大值,单位是bytes,默认100*1024*1024=100M
  backupCount:存储拆分文件个数,如果总的容量不够,会删除最开始的日志文件
  '''
  log_file = os.path.join(log_path,filename)
  logging.basicConfig(level=logging.INFO, format=message_format)
  log = logging.getLogger(filename)

  #定义过滤条件
  if not log.handlers:
      file=logging.handlers.RotatingFileHandler(log_file,maxBytes=filesize,backupCount=backupCount,encoding='utf-8')
      file.setFormatter(logging.Formatter(message_format))
      log.addHandler(file)
  return log

更全面的Python日志详解请参考:https://www.cnblogs.com/yyds/p/6901864.html
https://www.cnblogs.com/nancyzhu/p/8551506.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值