前言

  • 在 Python 中,可以直接用自带的 logging 模块来记录日志,但是在使用时我们需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份。个人感觉 logging 用起来其实并不是那么好用,主要是配置较为繁琐,相对于新手来说不太友好,那么接下来废话不多说直接上干货代码。

将logging模块封装

  • 首先新建一个log.py的文件

    • 导入需要用到的Python包
import sys
import logging
from settings import *
from os import makedirs
from os.path import dirname, exists
  • 创建Logger类、init初始化函数、get_logger函数
class Logger(object):def __init__(self):passdef get_logger(self,name=None):pass
  • 初始化函数添加配置项
# 此处可以新建一个settings.py 来存储这些配置选项 如不想多建其他文件 也可直接在初始化配置
self.loggers = {}
self.LOG_ENABLED = LOG_ENABLED  # 是否开启日志
self.LOG_TO_CONSOLE = LOG_TO_CONSOLE  # 是否输出到控制台
self.LOG_TO_FILE = LOG_TO_FILE  # 是否输出到文件
self.LOG_PATH = LOG_PATH  # 日志文件路径
self.LOG_LEVEL = LOG_LEVEL  # 日志级别
self.LOG_FORMAT = LOG_FORMAT # 每条日志输出格式
  • get_logger函数 判断是否输出到控制台代码
if self.LOG_ENABLED and self.LOG_TO_CONSOLE:stream_handler = logging.StreamHandler(sys.stdout)stream_handler.setLevel(level=self.LOG_LEVEL)formatter = logging.Formatter(self.LOG_FORMAT)stream_handler.setFormatter(formatter)logger.addHandler(stream_handler)
  • get_logger函数 判断是否输出到文件代码
if self.LOG_ENABLED and self.LOG_TO_FILE:log_dir = dirname(self.LOG_PATH)if not exists(log_dir): makedirs(log_dir)file_handler = logging.FileHandler(self.LOG_PATH, encoding='utf-8')file_handler.setLevel(level=self.LOG_LEVEL)formatter = logging.Formatter(self.LOG_FORMAT)file_handler.setFormatter(formatter)logger.addHandler(file_handler)
# 日志配置
# 是否开启log日志
LOG_ENABLED = os.getenv('LOG_ENABLED', 'True').upper() == 'TRUE'
# 是否输出到控制台
LOG_TO_CONSOLE = os.getenv('LOG_TO_CONSOLE', 'True').upper() == 'TRUE'
# 是否输出到文件
LOG_TO_FILE = os.getenv('LOG_TO_FILE', 'True').upper() == 'TRUE'
# 日志等级
LOG_LEVEL = os.getenv('LOG_LEVEL', 'DEBUG')
# 每条日志输出格式
log_format = '%(levelname)s - %(asctime)s - process: %(process)d - %(filename)s - %(name)s - %(lineno)d - %(module)s - %(message)s'
LOG_FORMAT = os.getenv('LOG_FORMAT', log_format)# 项目绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 日志存放路径
PATH = os.path.join(BASE_DIR, 'logs')
isExists = os.path.exists(PATH)
# 判断结果
if not isExists:# 如果不存在则创建目录os.makedirs(PATH)
now_date = datetime.datetime.now().strftime("%Y-%m-%d")
# 日志文件的绝对路径
LOG_PATH = os.path.join(PATH, f'proxy-log-{now_date}.log')from log import Loggerlog = Logger().get_logger()
  • 首先新建一个log.py的文件

    • 导入需要用到的Python包
from settings import loglog.debug('This is a debug message!')log.error('This is an error message!')
  • 打印信息
DEBUG - 2021-11-24 17:37:37,238 - process: 23652 - test.py - log - 10 - test - This is a debug message!
ERROR - 2021-11-24 17:37:37,238 - process: 23652 - test.py - log - 12 - test - This is an error message!Process finished with exit code 0

结语

  • 以上就是以上就是封装logging的全部代码,希望能帮助一些小伙伴。
  • 如操作有问题欢迎去我的博客(www.loganjin.cn)留言或者微信公众号(Python技术交流圈)留言交流哦。

Python项目中 封装日志模块logging 及快速调用方法相关推荐

  1. python大型项目中的日志模块_Python中日志模块的使用

    前言 程序和脚本往往是无人值守运行的,一旦发生问题,就需要我们去追溯当时的情况来定位问题的原因. 这便需要我们在程序和脚本中引入日志的功能. 相比于print信息,使用logging日志有以下优点 可 ...

  2. python成长日迹--日志模块logging

    简单输出日志 import logging #导入输出日志的模块#我们直接输出查看结果 logging.debug('debug message') logging.info('info messag ...

  3. Python的日志模块logging的使用

    Python的日志模块logging的使用 1 logging模块介绍 2 logging 简单示例 3 logging.basicConfig() 4 logging组件 4.1 Logger类 4 ...

  4. 【Python】—日志模块logging使用详解1

    文章目录 1.日志级别 2.logging流程 3.几个重要的类 3.1 Logger类 1) 最常用的配置方法 2) 创建`Logger`对象`logging.getLogger([name])` ...

  5. Python之配置日志模块logging

    一.定义日志打印方式 如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息.可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义. 常见打印日志信息形式如下 ...

  6. python logging模块的作用_Python 日志模块logging分析及使用-2

    本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...

  7. python logging模块的作用_【python】【logging】python日志模块logging常用功能

    logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...

  8. Python日志模块logging高级用法

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  9. C#项目中使用日志框架Log4net

    C#项目中使用日志框架Log4net 背景 准备条件 日志服务简单封装 使用封装的服务类记录日志 配置文件App.config/Web.config 背景 无论是软件的开发期间还是发布后的运维期间,日 ...

最新文章

  1. opencv openpose
  2. 汇编实验2.2 查找匹配字符串(附有详细注释和源代码和相关知识)
  3. 【图像分类】分类专栏正式上线啦!初入CV、AI你需要一份指南针!
  4. Redis学习之Sentinel(四)
  5. SAP CRM Survey调查问卷的模型设计原理解析
  6. 【计算机算法设计与分析】——排序
  7. LeetCode(合集)删除数组中的元素(26,80,283)
  8. JNative用法注意事项
  9. c语言cin输入数组,C++基础:各种输入方法总结cin.get()、
  10. Windows安装tensorflow-gpu1.4.0
  11. php通用查询系统excel,php+excel通用课表查询系统
  12. Webpack5构建微前端和Web应用程序2022教程
  13. opencv实现银行卡号识别
  14. Qt调用工业相机之海康威视相机
  15. C语言求卢卡斯序列,斐波那契序列和卢卡斯序列
  16. dfs和bfs走迷宫
  17. 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
  18. (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】
  19. 如何申请开通个人邮箱?
  20. C1实训-Java薪资转换(适合初学者)

热门文章

  1. jquery1.4 API 区别与更新中文版(beta)
  2. linux 的间隔定时器函数setitimer
  3. 【AI视野·今日Robot 机器人论文速览 第四期】Wed, 9 Jun 2021
  4. 枚举数据类型 c# 114866833
  5. 异常捕获try...catch... c#
  6. python-模块的操作-安装-导入-使用
  7. 一键安装zabbix percona mysql插件监控mysql
  8. S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析 1
  9. 只要加一行,让 IE 五倍速执行 JavaScript
  10. python实战===生成随机数