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实现斐波那契(Fibonacci)函数
Mar 25 Python
Python中协程用法代码详解
Feb 10 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
Python实现FTP文件传输的实例
Jul 07 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Python实现aes加密解密多种方法解析
May 15 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
python 调用Google翻译接口的方法
Dec 09 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
一句话JavaScript表单验证代码
2009/08/02 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
数据库什么时候应该被重组
2012/11/02 面试题
施工班组长岗位职责
2014/01/05 职场文书
法学个人求职信范文
2014/01/27 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
火灾现场处置方案
2014/05/28 职场文书
团队精神口号
2014/06/06 职场文书
初中数学教学随笔
2015/08/15 职场文书
vue实力踩坑之push当前页无效
2022/04/10 Vue.js