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中使用序列的方法
Aug 03 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Django中使用第三方登录的示例代码
Aug 20 Python
python获取url的返回信息方法
Dec 17 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
Python计算IV值的示例讲解
Feb 28 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
Python实现SMTP邮件发送
Jun 16 Python
python基于selenium爬取斗鱼弹幕
Feb 20 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中判断变量为空的几种方法小结
2013/11/12 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
js计算页面刷新的次数
2009/07/20 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
react路由配置方式详解
2017/08/07 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python定时执行指定函数的方法
2015/05/27 Python
python re模块的高级用法详解
2018/06/06 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
python用for循环求和的方法总结
2019/07/08 Python
耐克亚太地区:Nike APAC
2019/12/07 全球购物
GWebs公司笔试题
2012/05/04 面试题
业务部门经理岗位职责
2014/02/23 职场文书
四群教育工作实施方案
2014/03/26 职场文书
求职自我推荐信
2015/03/24 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
创业计划书之网吧
2019/10/10 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL