Python日志处理模块logging用法解析


Posted in Python onMay 19, 2020

 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等。

其主要优点如下:

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

2.尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析。

 logging模块基本使用:

设置logger名称

logger = logging.getLogger(log_name)

设置log级别

logger.setLevel(logging.info)

创建一个handler,用于写入日志文件

fh = logging.FileHandler(log_file)

设置日志级别,默认为logging.WARNING

fh.setLevel(logLevel[log_level])

定义handler的输出格式

formatter = logging.Formatter('%(asctime)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s')

fh.setFormatter(formatter)

添加handler

logger.addHandler(fh)

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: 打印日志信息

    示例代码如下:

import logging
import datetime
import os

# 定义日志级别字典
logLevelDic={
  "info":logging.INFO,
  "debug":logging.DEBUG,
  "warning":logging.WARNING,
  "error":logging.ERROR
}

# 日志保存路径
logSavePath=os.path.join(os.getcwd(),"logs")
if not os.path.exists(logSavePath):
  os.makedirs(logSavePath,exist_ok=True)
# 当前时间
curTime=datetime.datetime.now().strftime("%Y%m%d")
# 保存的日志的完整名称
logFile=os.path.join(logSavePath,curTime+".SADCI.log")
# 日志级别
logLevel="error"

class Logger:
  def __init__(self,logFile=logFile,logLevel=logLevelDic["error"]):
    self.logFile=logFile
    self.logLevel=logLevel
    # 设置logger名称
    self.logger=logging.getLogger()
    # 设置参数级别
    self.logger.setLevel(self.logLevel)
    self.formatter=logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
    # 判断handlers是否存在
    if not self.logger.handlers:
      # 写入控制台
      consoleStream=logging.StreamHandler()
      consoleStream.setLevel(self.logLevel)
      consoleStream.setFormatter(self.formatter)
      # 写入文件
      fileStream=logging.FileHandler(self.logFile,mode="a")
      fileStream.setLevel(self.logLevel)
      fileStream.setFormatter(self.formatter)
      self.logger.addHandler(consoleStream)
      self.logger.addHandler(fileStream)

def MyLogger():
  return Logger(logFile=logFile,logLevel=logLevelDic[logLevel]).logger


if __name__ == '__main__':
  MyLogger().error("test logg")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
python 异常处理总结
Oct 18 Python
基于python内置函数与匿名函数详解
Jan 09 Python
基于python实现学生管理系统
Oct 17 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
Python基于template实现字符串替换
Nov 27 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 Python
Python利用FlashText算法实现替换字符串
Mar 31 Python
基于PyQT实现区分左键双击和单击
May 19 #Python
Python更换pip源方法过程解析
May 19 #Python
解决Django Haystack全文检索为空的问题
May 19 #Python
浅谈django 重载str 方法
May 19 #Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 #Python
在Django中自定义filter并在template中的使用详解
May 19 #Python
Django Model中字段(field)的各种选项说明
May 19 #Python
You might like
php whois查询API制作方法
2011/06/23 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
python实现3D地图可视化
2020/03/25 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Java基础知识面试要点
2016/07/29 面试题
一套带答案的C++笔试题
2014/01/10 面试题
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
团日活动策划书
2014/02/01 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
会计专业求职信范文
2014/03/16 职场文书
清洁工个人总结
2015/03/04 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python