Python项目中 封装日志模块logging 及快速调用方法
前言
- 在 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.py
文件就完成了在创建一个
settings.py
来存储log的配置选项(此文件可不创建直接在log.py
的初始化函数中配置)settings.py
中配置代码
# 日志配置
# 是否开启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 及快速调用方法相关推荐
- python大型项目中的日志模块_Python中日志模块的使用
前言 程序和脚本往往是无人值守运行的,一旦发生问题,就需要我们去追溯当时的情况来定位问题的原因. 这便需要我们在程序和脚本中引入日志的功能. 相比于print信息,使用logging日志有以下优点 可 ...
- python成长日迹--日志模块logging
简单输出日志 import logging #导入输出日志的模块#我们直接输出查看结果 logging.debug('debug message') logging.info('info messag ...
- Python的日志模块logging的使用
Python的日志模块logging的使用 1 logging模块介绍 2 logging 简单示例 3 logging.basicConfig() 4 logging组件 4.1 Logger类 4 ...
- 【Python】—日志模块logging使用详解1
文章目录 1.日志级别 2.logging流程 3.几个重要的类 3.1 Logger类 1) 最常用的配置方法 2) 创建`Logger`对象`logging.getLogger([name])` ...
- Python之配置日志模块logging
一.定义日志打印方式 如果我们运行自己的程序,有时候需要记录程序运行过程中出现的问题或者信息.可以运用日志模块logging来记录,该模块日志格式可以根据用户需求来自己定义. 常见打印日志信息形式如下 ...
- python logging模块的作用_Python 日志模块logging分析及使用-2
本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...
- python logging模块的作用_【python】【logging】python日志模块logging常用功能
logging模块:应用程序的灵活事件日志系统,可以打印并自定义日志内容 logging.getLogger 创建一个log对象 >>> log1=logging.getLogger ...
- Python日志模块logging高级用法
推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...
- C#项目中使用日志框架Log4net
C#项目中使用日志框架Log4net 背景 准备条件 日志服务简单封装 使用封装的服务类记录日志 配置文件App.config/Web.config 背景 无论是软件的开发期间还是发布后的运维期间,日 ...
最新文章
- opencv openpose
- 汇编实验2.2 查找匹配字符串(附有详细注释和源代码和相关知识)
- 【图像分类】分类专栏正式上线啦!初入CV、AI你需要一份指南针!
- Redis学习之Sentinel(四)
- SAP CRM Survey调查问卷的模型设计原理解析
- 【计算机算法设计与分析】——排序
- LeetCode(合集)删除数组中的元素(26,80,283)
- JNative用法注意事项
- c语言cin输入数组,C++基础:各种输入方法总结cin.get()、
- Windows安装tensorflow-gpu1.4.0
- php通用查询系统excel,php+excel通用课表查询系统
- Webpack5构建微前端和Web应用程序2022教程
- opencv实现银行卡号识别
- Qt调用工业相机之海康威视相机
- C语言求卢卡斯序列,斐波那契序列和卢卡斯序列
- dfs和bfs走迷宫
- 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
- (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】
- 如何申请开通个人邮箱?
- C1实训-Java薪资转换(适合初学者)
热门文章
- jquery1.4 API 区别与更新中文版(beta)
- linux 的间隔定时器函数setitimer
- 【AI视野·今日Robot 机器人论文速览 第四期】Wed, 9 Jun 2021
- 枚举数据类型 c# 114866833
- 异常捕获try...catch... c#
- python-模块的操作-安装-导入-使用
- 一键安装zabbix percona mysql插件监控mysql
- S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析 1
- 只要加一行,让 IE 五倍速执行 JavaScript
- python实战===生成随机数