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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
python处理multipart/form-data的请求方法
Dec 26 Python
pandas DataFrame创建方法的方式
Aug 02 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
Python中包的用法及安装
Feb 11 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
Python PyQt5整理介绍
Apr 01 Python
浅谈Python数学建模之线性规划
Jun 23 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的图形函数中显示汉字
2006/10/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
JQuery验证工具类搜集整理
2013/01/16 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
js微信支付实现代码
2016/12/22 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
python动态加载变量示例分享
2014/02/17 Python
理解Python中函数的参数
2015/04/27 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
广告业务员岗位职责
2014/02/06 职场文书
单位承诺书格式
2014/05/21 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
pandas求平均数和中位数的方法实例
2021/08/04 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript
Python sklearn分类决策树方法详解
2022/09/23 Python