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中字符串的修改及传参详解
Nov 30 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Tensorflow卷积神经网络实例
May 24 Python
python 字典修改键(key)的几种方法
Aug 10 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python 加密与解密小结
Dec 06 Python
python内置函数sorted()用法深入分析
Oct 08 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python实现socket简单通信的示例代码
Apr 13 Python
python设置 matplotlib 正确显示中文的四种方式
May 10 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中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
AngularJS国际化详解及示例代码
2016/08/18 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
详解python并发获取snmp信息及性能测试
2017/03/27 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
婚庆司仪主持词
2014/03/15 职场文书
献爱心活动总结
2014/05/07 职场文书
篮球赛口号
2014/06/18 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
增值税发票丢失证明
2015/06/19 职场文书
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
python如何将mat文件转为png
2022/07/15 Python