Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >loguru进一步封装解决打印日志定位异常问题

loguru进一步封装解决打印日志定位异常问题

作者头像
小小咸鱼YwY
发布于 2023-08-10 07:17:24
发布于 2023-08-10 07:17:24
58300
代码可运行
举报
文章被收录于专栏:python-爬虫python-爬虫
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import sys
import time
from loguru import logger
import inspect

def creat_time_os():
    creat_time = time.strftime("%Y-%m-%d", time.localtime())

    sys.path.append(os.path.dirname(os.path.abspath(__file__)))

    log_path_dir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
    logs_path = os.path.join(log_path_dir, "logs", creat_time)
    if os.path.exists(logs_path):
        return logs_path
    else:
        try:
            os.makedirs(logs_path)
        except Exception as e:
            print(e)
        return logs_path


# 提供日志功能
class uru_logger:
    # 去除默认控制台输出
    # logger.remove()

    # 输出日志格式

    def __init__(self):
        logger_format = "{time:YYYY-MM-DD HH:mm:ss,SSS} | {level} | {message}"
        logger.remove()  # 这里是不让他重复打印
        logger.add(sys.stderr,  # 这里是不让他重复打印
                   level="DEBUG",
                   format=logger_format,

                   )
        # 输出到文件,并按天分割和压缩
        logs_path = creat_time_os()
        # 日志文件名:由用例脚本的名称,结合日志保存路径,得到日志文件的绝对路径
        logname = os.path.join(logs_path, sys.argv[0].split('/')[-1].split('.')[0]) + '.log'
        logger.add(
            logname,
            encoding="utf-8",
            format=logger_format,
            level="INFO",
            rotation="500MB",
            retention="5 days",
            # colorize=True,
            compression="zip")
        self.creat_time = time.strftime("%Y-%m-%d", time.localtime())
        self.log = logger

    def check_format(self):
        if time.strftime("%Y-%m-%d", time.localtime()) != self.creat_time:
            self.__init__()


uru_logger_log = uru_logger()


def log_info(*args):
    '''
    info log信息
    :param message:
    :return:
    '''
    uru_logger_log.check_format()
    try:
        caller_frame = inspect.currentframe().f_back
        function_name = caller_frame.f_code.co_name
        line_number = caller_frame.f_lineno
        previous_module = caller_frame.f_globals['__name__']
        message_part = args[0] if len(args) == 1 else str(args)
        custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
        uru_logger_log.log.info(custom_message)
    except:
        uru_logger_log.log.info(args[0] if len(args) == 1 else args)


def log_debug(*args):
    '''
    debug log信息
    :param message:
    :return:
    '''
    uru_logger_log.check_format()
    try:
        caller_frame = inspect.currentframe().f_back
        function_name = caller_frame.f_code.co_name
        line_number = caller_frame.f_lineno
        previous_module = caller_frame.f_globals['__name__']
        message_part = args[0] if len(args) == 1 else str(args)
        custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
        uru_logger_log.log.debug(custom_message)
    except:
        uru_logger_log.log.debug(args[0] if len(args) == 1 else args)


def log_error(*args):
    '''
    error log信息
    :param message:
    :return:
    '''
    uru_logger_log.check_format()
    try:
        caller_frame = inspect.currentframe().f_back
        function_name = caller_frame.f_code.co_name
        line_number = caller_frame.f_lineno
        previous_module = caller_frame.f_globals['__name__']
        message_part = args[0] if len(args) == 1 else str(args)
        custom_message = f"{previous_module} | {function_name}:{line_number} | - {message_part}"
        uru_logger_log.log.error(custom_message)
    except:
        uru_logger_log.log.error(args[0] if len(args) == 1 else args)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
关于loguru日志模板并发重复打印修复
直接上模板代码 import os import sys import time from loguru import logger def creat_time_os(): creat_time = time.strftime("%Y-%m-%d", time.localtime()) sys.path.append(os.path.dirname(os.path.abspath(__file__))) log_path_dir = os.path.abspath(os.
小小咸鱼YwY
2022/06/27
1.9K0
Python 中那些令人拍案叫绝的功能!
链接:www.oschina.net/translate/python-functions
编程文青李狗蛋
2019/10/10
4220
Python 中那些令人拍案叫绝的功能!
loguru 简单方便的 Python 日志记录管理模块
在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样。在使用时我们需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份。但其实个人感觉 logging 用起来其实并不是那么好用,其实主要还是配置较为繁琐。
王图思睿
2021/06/16
1.6K0
python 写window服务
import win32serviceutil import win32service import win32event import os import logging import inspect import servicemanager import sys
用户5760343
2019/08/06
1.2K1
python 编写服务
import win32timezone from logging.handlers import TimedRotatingFileHandler import win32serviceutil import win32service import win32event import os import logging import inspect import time import shutil
用户5760343
2019/07/08
1.1K0
python--inspect模块
1. inspect.getmembers(object[, predicate])
yaohong
2019/09/11
7640
Python自动化之使用loguru优雅输出日志
Hi,大家好。在之前的文章:Python接口自动化之logging日志,介绍了logging日志。今天给大家介绍另外一款优雅的日志——loguru。loguru是Python 中一个简易且强大的第三方日志记录库,在通过添加一系列有用的功能来解决标准记录器的注意事项,从而减少 Python 日志记录的痛苦。
可可的测试小栈
2022/04/13
3.4K0
Python自动化之使用loguru优雅输出日志
python 写window服务(必须写在服务类里)
import win32serviceutil import win32service import win32event import os import logging import inspect import servicemanager import sys
用户5760343
2019/08/06
6410
python 日志封装
写python项目时,需要用到日志类,需求为:日志信息可配置,提供几种类型不同的配置,并且日志既可以写到文本也可以写到数据库中。 实现时日志类直接使用python的logging,配置信息写到配置文件logging_data.conf,并使用logging.config.fileConfig(log_config_path)加载配置。写日志到数据库参考了log4mongo-1.6.0.tar.gz的写法,同时每当在数据库写日志时,同时需要插入一些额外信息,比如:projectId runningId algorithmId,所以使用了python的logging.LoggerAdapter把额外信息添加进去。
py3study
2020/01/06
8780
Python3日志记录模块
描述: Logging 库是非常常用的记录日志库,通过logging模块存储各种格式的日志,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚、日志按时分秒进行切割等.
全栈工程师修炼指南
2022/09/29
5470
Python3日志记录模块
使用Python写Windows Service服务程序
如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装。
用户8949263
2022/11/07
4.4K1
使用Python写Windows Service服务程序
DJango错误日志生成
DJango错误日志生成 setting.py设置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': {
小小咸鱼YwY
2020/06/19
8500
python生成日志
scrapy源码中修改日志时间显示方式, from scrapy.extensions import corestats 重写 corestats中 的 spider_opened 和 spider_closed。
李玺
2021/11/22
1K0
python生成日志
码农技术炒股之路——配置管理器、日志管理器
        配置管理器和日志管理器是项目中最为独立的模块。我们可以很方便将其剥离出来供其他Python工程使用。文件的重点将是介绍Python单例和logging模块的使用。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
4350
python logging with
Recently, I was made a service which can provide a simple way to get best model. so, i spent lot of time to read source code of auto-sklearn, auto-sklearn is an automated machine learning toolkit and a drop-in replacement for a scikit-learn estimator.
py3study
2020/01/16
5630
Python日志处理logging模块详解
logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点
王大力测试进阶之路
2020/01/26
9750
Ultimate Guide to Python Debugging
平时有很多碎片化时间,比如下班的地铁上,或者等待的时间,我们总喜欢拿出手机玩,这个时间也可以用来学习呢,当然佳爷自己也想学习英语,所以上下班的时间看看。
仇诺伊
2020/06/04
5460
Loguru:Python 日志终极解决方案
日志的作用非常重要,日志可以记录用户的操作、程序的异常,还可以为数据分析提供依据,日志的存在意义就是为了能够在程序在运行过程中记录错误,方便维护和调试,能够快速定位出错的地方,减少维护成本。每个程序员都应该知道,不是为了记录日志而记录日志,日志也不是随意记的。要实现能够只通过日志文件还原整个程序执行的过程,达到能透明地看到程序里执行情况,每个线程、每个过程到底执行到哪的目的。日志就像飞机的黑匣子一样,应当能够复原异常的整个现场乃至细节!
K哥爬虫
2021/11/04
1.9K0
Loguru:Python 日志终极解决方案
使用Python写Windows Ser
如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装(注意下载符合自己OS的版本)
py3study
2020/01/10
1.4K0
使用Python写Windows Ser
一份 Python 日志配置,同时适用于开发和生产环境
在日志方面,我的做法是这样的,既打印到终端,又输出到文件,开发环境的级别是 DEBUG,生产环境是 INFO,我最常用的一份配置文件如下:log.py
somenzz
2022/10/25
3690
相关推荐
关于loguru日志模板并发重复打印修复
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验