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 strip lstrip rstrip使用方法
Sep 06 Python
python创建线程示例
May 06 Python
Python实现注册登录系统
Aug 08 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
SVM基本概念及Python实现代码
Dec 27 Python
python读取文件名称生成list的方法
Apr 27 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
Python使用sqlite3模块内置数据库
May 07 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 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获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
thinkphp实现上一篇与下一篇的方法
2014/12/08 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
三种方式实现瀑布流布局
2017/02/10 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
Python3.6简单反射操作示例
2018/06/14 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
Python实现代码统计工具
2019/09/19 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
先进工作者获奖感言
2014/02/08 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
详解Nginx 工作原理
2021/03/31 Servers