首页 > 编程语言 >python日志模块logging

python日志模块logging

时间:2024-01-29 15:24:03浏览次数:21  
标签:info logging log python debug 日志 config logger

示例代码

# 导入日志模块
import logging
import logging.config

from config import LOG_DIR, settings


def config_logging():  # 定义日志配置方法
    config_dict = {  # 定义日志配置字典
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'debug_fmt': {'format': '%(asctime)s %(pathname)s:%(lineno)d @%(funcName)s %(levelname)s: %(message)s'},
            'test_name': {'format': '%(asctime)s %(pathname)s:%(lineno)d %(name)s @%(funcName)s %(levelname)s: %(message)s'},
            'verbose': {'format': '%(asctime)s %(levelname)s %(name)s %(process)d %(thread)d %(message)s'},
        },
        'handlers': {  # 定义'handlers', 这里有三个handlers-> [Stream, debug_file, info_file]
            "Stream": {
                "formatter": 'debug_fmt',
                'level': 'DEBUG',
                "class": "logging.StreamHandler",
            },
            "debug_file": {
                "formatter": 'debug_fmt',
                "level": 'DEBUG',
                "class": 'logging.handlers.TimedRotatingFileHandler',
                "filename": LOG_DIR / 'debug.log',
                "backupCount": 1,
                "when": 'D',
                "encoding": 'utf-8',
            },
            "info_file": {
                "formatter": 'debug_fmt',
                "level": 'INFO',
                "class": 'logging.handlers.TimedRotatingFileHandler',
                "filename": LOG_DIR / 'info.log',
                "backupCount": 3,
                "when": 'D',
                "encoding": 'utf-8',
            },
        },
        'loggers': {  # 定义loggers
            '': {'level': settings.LOG_LEVEL, 'handlers': settings.LOG_HANDLERS},  # 使用了dynaconf模块调用config配置, level可以传入DEBUG、INFO等, handlersk可以传入字典中定义的handlers
        },
    }
    logging.config.dictConfig(config_dict)  # 使用dictConfig方法,传入字典格式的日志配置


config_logging()
logger = logging.getLogger('msp_log')  # 实例化log对象为logger, 后续调用可以用logger.info('msg')


if __name__ == '__main__':

    def how(a, *args, **kwargs):
        logger.debug('debug')
        logger.info('info')
        logger.info(LOG_DIR)
        logger.info(f'{a, *args}')
        return 'hello'

    how(2, [12, 34], {'aaaa': 'aaaa', 'bb': 'bb'}, c='c', d='d')

返回

2024-01-29 15:04:00,836 d:\My\crmProjects\utils\log_setting.py:56 @how DEBUG: debug
2024-01-29 15:04:00,837 d:\My\crmProjects\utils\log_setting.py:57 @how INFO: info
2024-01-29 15:04:00,837 d:\My\crmProjects\utils\log_setting.py:58 @how INFO: D:\My\crmProjects\files\logs
2024-01-29 15:04:00,838 d:\My\crmProjects\utils\log_setting.py:59 @how INFO: (2, [12, 34], {'aaaa': 'aaaa', 'bb': 'bb'})

标签:info,logging,log,python,debug,日志,config,logger
From: https://www.cnblogs.com/ishuangjin/p/17994595

相关文章

  • Python中/与//的区别是什么?其如何使用?
    在学习Python或者使用Python进行工作的时候,大家应该都看到过“/”和“//”,它们是Python算术运算符中比较常用的两个运算符,那么Python语言中/与//的区别是什么?如果你还不清楚,这篇文章千万不要错过。Python语言中/与//的区别是什么?在Python中/表示浮点整除法,返回浮点结......
  • 四、python数据类型的性能
    四、python数据类型的性能比较列表list和字典dict两种内置数据类型上各种操作大O数量级两种都属于容器,都是可变类型。类型listdict索引自然数i不可变类型值key添加append/extend/insertb[k]=v删除pop/removepop更新a[i]=vb[k]=v正查a[i]/a[i......
  • 在Python中,子类继承父类并调用父类的构造方法有几种方式: 1. 如果子类没有重写`__init
    在Python中,子类继承父类并调用父类的构造方法有几种方式:1.如果子类没有重写`__init__`,实例化子类时,会自动调用父类定义的`__init__`¹。```pythonclassFather(object):  def__init__(self,name):    self.name=nameclassSon(Father):  passson=So......
  • 在Python的Tkinter库中,`ttk.Combobox`是一个组合框控件,它允许用户从下拉列表中选择一
    在Python的Tkinter库中,`ttk.Combobox`是一个组合框控件,它允许用户从下拉列表中选择一个选项,也可以让用户输入内容。以下是一些主要的参数和方法:1.**创建Combobox**¹²:  ```python  importtkinterastk  importtkinter.ttkasttk  root=tk.Tk()  ......
  • 在Python中,你可以使用以下代码来更改ttk.Combobox下拉框选项的文字大小¹: ```python
    在Python中,你可以使用以下代码来更改ttk.Combobox下拉框选项的文字大小¹:```pythonimporttkinterastkfromtkinterimportttkroot=tk.Tk()root.geometry('500x500')#设置所有Combobox的下拉框文字大小root.option_add("*TCombobox*Listbox.font","Arial20")combob......
  • Python下载的11种姿势,一种比一种高级!
    今天我们一起学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、AmazonS3和其他资源。 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他策略。1、使用requests你可以使用requests模块从一个UR......
  • SysTrayIcon 改的 python tkinter 最小化至系统托盘,适用TTK
    网上的SysTrayIcon改的,Tk页面最小化至托盘,托盘图标左键单击恢复Tk界面1.点击最小化隐藏至托盘2.托盘图标右键菜单展示,左键返回Tk界面。托盘图标可以自定义,修改了SysTrayIcon更容易调用,Demo窗口加了注释,具体查看_Main类。代码如下:importwin32api,win32con,win32gui_str......
  • docker\docker-compose 配置容器日志大小
    问题背景:24/1/29,docker容器日志爆满,导致docker无法启动  解决方案:1.删除大日志2.日志配置docker\docker-compose配置容器日志大小_docker-compose限制日志大小-CSDN博客......
  • Python Coroutine 池化实现
    PythonCoroutine池化实现池化介绍在当今计算机科学和软件工程的领域中,池化技术如线程池、连接池和对象池等已经成为优化资源利用率和提高软件性能的重要工具。然而,在Python的协程领域,我们却很少见到类似于ThreadPoolExecutor的CoroutinePoolExecutor。为什么会这样呢?首......
  • 虚拟环境python3.8安装GDAL包
    网上的方法直接是:pipinstallGDAL‑3.4.1‑cp38‑cp38‑win_amd64.whl但是这个方法不适用于我,因为我的pycharm上面的anaconda是python3.7,但是我创建了一个python3.8的虚拟环境所以需要:1.切换虚拟环境2.导入离线包python3.8对应着的GDAL为:GDAL-3.4.3-cp38-cp38-win_amd6......