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发送邮件接收邮件示例分享
Jan 21 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 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
收音机的保养
2021/03/01 无线电
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
python issubclass 和 isinstance函数
2019/07/25 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
主治医师岗位职责
2013/12/10 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
投资合作意向书范本
2015/05/08 职场文书
2015年城管执法工作总结
2015/07/23 职场文书