一、先上结论

Python logging模块进行二次封装

# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 博客:caituotuo.top
# 时间:2022/3/16 20:10
# 功能:日志模块封装 import os
import time
import logging
from logging import handlers from utils.get_path_info import GetPathInfo class GetLogger(object):
""" 日志封装类 """ @classmethod
def get_logger(cls):
# logger = logging.getLogger(__name__) # 不会打印 HTTP General 信息
log = logging.getLogger()
level_relations = {
'NOTSET': logging.NOTSET,
'DEBUG': logging.DEBUG,
'INFO': logging.INFO,
'WARNING': logging.WARNING,
'ERROR': logging.ERROR,
'CRITICAL': logging.CRITICAL
} # 日志级别关系映射 # 创建日志存放的目录
project_path = GetPathInfo().get_project_path() # get_project_path()获取项目根目录
logs_dir = project_path + "logs"
if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
pass
else:
os.mkdir(logs_dir)
# 日志文件以日期命名
log_file_name = '%s.log' % time.strftime("%Y-%m-%d", time.localtime())
log_file_path = os.path.join(logs_dir, log_file_name) rotating_file_handler = handlers.TimedRotatingFileHandler(filename=log_file_path,
when='D', # 按天分隔,一天一个文件
interval=30,
encoding='utf-8') # 日志输出格式
fmt = "%(asctime)s %(levelname)s %(pathname)s %(lineno)d %(message)s"
formatter = logging.Formatter(fmt)
rotating_file_handler.setFormatter(formatter) # 加上判断,避免重复打印日志
if not log.handlers:
# 控制台输出
console = logging.StreamHandler()
console.setLevel(level_relations["NOTSET"])
console.setFormatter(formatter)
# 写入日志文件
log.addHandler(rotating_file_handler)
log.addHandler(console)
log.setLevel(level_relations['DEBUG'])
return log if __name__ == '__main__':
logger = GetLogger().get_logger()
logger.debug('调试')
logger.info('信息')
logger.warning('警告')
logger.error('报错')
logger.critical('严重')

二、logging.Formatter自定义日志格式

1. For example

fmt = "%(name)s %(asctime)s %(created)f %(relativeCreated)d %(msecs)d %(levelname)s %(levelno)s %(pathname)s %(filename)s %(module)s %(funcName)s %(lineno)d %(process)d %(thread)d %(threadName)s %(message)s"
formatter = logging.Formatter(fmt) 结果:
root 2022-03-20 03:00:05,449 1647716405.449377 28 449 DEBUG 10 F:/Desktop/qys_priv_open/utils/get_logger.py get_logger.py get_logger <module> 68 7420 3244 MainThread 调试

2. 常用的格式字符串

格式字符串 作用 例如
%(name)s Logger的名称 root
%(asctime)s 打印日志的时间,字符串形式(datetime.datetime.now()的返回值) 2022-03-20 02:30:12,776(逗号后面是毫秒)
%(created)f 日志打印的时间,用Unix标准地表示时间的浮点数(time.time()的返回值) 1647715277.792532
%(relativeCreated)d 输出日志信息的耗时,从Looger创建开始计时,以毫秒为单位 35
%(msecs)d 打印日志的时间的毫秒部分 449
%(levelname)s 日志级别,文本形式 “DEBUG”、“INFO”、“WARNING”、“ERROR”、“CRITICAL”
%(levelno)s 日志级别,数字形式 DEBUG=10、INFO=20、WARNING=30、ERROR=40、CRITICAL=50
%(pathname)s 调用日志输出函数的模块的完整路径名 F:/Desktop/qys_priv_open/utils/get_logger.py
%(filename)s 调用日志输入函数的模块的文件名 get_logger.py
%(module)s 调用日志输出函数的模块名 get_logger
%(funcName)s 调用日志输出函数的函数名 <module>
%(lineno)d 调用日志输出函数的语句所在的代码行 69
%(process)d 进程ID 7840
%(thread)d 线程ID 6004
%(threadName)s 线程名 MainThread
%(message)s 输出的日志信息 这是一条测试日志

原文链接:https://caituotuo.top/11abedfb.html

微信公众号:IT小学生蔡坨坨

Python日志模块封装的更多相关文章

  1. python日志模块logging

    python日志模块logging   1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...

  2. python日志模块的使用

    学习一下python的日志模块logging,可以参考如下博客,写得很详细 https://www.cnblogs.com/yyds/p/6901864.html https://www.cnblog ...

  3. Python日志模块的管理(二)

    日志模块可以通过封装一个类,也可以通过配置文件取管理 新建1个log.ini文件 [loggers] keys=root [handlers] keys=fileHandler,streamHandl ...

  4. python日志模块

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...

  5. Python 日志模块实例

    python 打印对象的所有属性值: def prn_obj(obj):     print '\n'.join(['%s:%s' % item for item in obj.__dict__.it ...

  6. Python日志模块logging用法

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  7. python日志模块logging学习

    介绍 Python本身带有logging模块,其默认支持直接输出到控制台(屏幕),或者通过配置输出到文件中.同时支持TCP.HTTP.GET/POST.SMTP.Socket等协议,将日志信息发送到网 ...

  8. python日志模块笔记

    前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...

  9. Python 日志模块详解

    前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...

  10. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

随机推荐

  1. Java中各种比较对象方式对比

    1.介绍 比较对象是面向对象编程语言的一个基本特征.在本教程中,我们将介绍Java语言的一些特性,这些特性允许我们比较对象.此外,我们还将研究外部库中的这些特性. 2.==和!=操作符 让我们从==和 ...

  2. Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块

    1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...

  3. IoT(Internet of things)物联网入门介绍

    1.什么样的物可以入网? 要有数据传输通路 要有一点的存储功能 要有CPU 要有操作系统 要有专门的应用程序 遵循物联网的通信协议 在网络世界中有可被识别的唯一编号 2.MQTT协议 不是在说物联网吗 ...

  4. Dockerfile和docker-compose详解

    Dockerfile镜像制作 docker/podman中, 镜像是容器的基础,每次执行docker run的时候都会指定哪个基本镜像作为容器运行的基础.我们之前的docker的操作都是使用来自doc ...

  5. 【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度

    问题描述 把MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度,这是什么情况呢? 问题解答 因为MP4上传到Azure Blob后,根据公开的 ...

  6. 【Azure Spring Cloud】Spring Cloud Azure 4.0 调用Key Vault遇见认证错误 AADSTS90002: Tenant not found.

    问题描述 Spring Cloud Azure 4.0 调用 Key Vault 的代码中,没有找到设置 authority-host 的配置项,导致认证出现错误 Caused by: com.mic ...

  7. Spring Boot+Thymeleaf+MyBatis--推荐一个后端练手极佳的商城项目

    项目整体架构 newbee-mall ├── src/main/java └── ltd.newbee.mall ├── common // 存放相关的常量配置及枚举类 ├── config // 存 ...

  8. VC+MFC button获取+list复制+获取+页面转换+登录与数据库账户,密码进行对比 +基础知识

    1 // DlgExec.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "Self.h" 6 #incl ...

  9. AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

    GPT等AI大模型震撼来袭,基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿,深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法,在中国RPA元年(2019年) ...

  10. vscode 批量函数前加const 正则表达式替换

    需求 有200多个函数,我要在前面加const devService_importCertificate_result = function (args) { 方案 vscode 替换 打开正则的图标 ...