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实现的各种排序算法代码
Mar 04 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
用C++封装MySQL的API的教程
May 06 Python
浅谈Python的垃圾回收机制
Dec 17 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
简单分析python的类变量、实例变量
Aug 23 Python
Python 将json序列化后的字符串转换成字典(推荐)
Jan 06 Python
python实现人机猜拳小游戏
Feb 03 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 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
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js中eval详解
2012/03/30 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python实现局域网内实时通信代码
2019/12/22 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
Python实现播放和录制声音的功能
2020/08/12 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
工作中个人的自我评价
2013/12/31 职场文书
小学生新学期寄语
2014/01/19 职场文书
小学语文国培感言
2014/03/04 职场文书
产品开发计划书
2014/04/27 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
求职自我评价怎么写
2015/03/09 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android
nginx静态资源的服务器配置方法
2022/07/07 Servers