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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
Python中表示字符串的三种方法
Sep 06 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
对Python发送带header的http请求方法详解
Jan 02 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
python根据时间获取周数代码实例
Sep 30 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
在python中实现导入一个需要传参的模块
May 12 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
一个目录遍历函数
2006/10/09 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
使用graphics.py实现2048小游戏
2015/03/10 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python利用IPython提高开发效率
2016/08/10 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python实现媒体播放器功能
2018/02/11 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
python识别验证码图片实例详解
2020/02/17 Python
Python 定义只读属性的实现方式
2020/03/05 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
护理学专业推荐信
2013/12/03 职场文书
供货协议书范本
2014/04/22 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Java实现学生管理系统(IO版)
2022/02/24 Java/Android