首页 > 编程语言 > 详细

Python logger 的使用

时间:2021-05-08 16:22:42      阅读:12      评论:0      收藏:0      [点我收藏+]

实现环境:Python-3.7, fastapi-0.64.0,uvicorn-0.13.4

目录结构

--config.py

--logger.py

--main.py

--log.log

具体代码:

config.py

  主要是进行日志功能的相关环境的设置

import os
import pathlib

BACKEND_PATH = pathlib.Path(__file__).parent.parent

SUPER_USER = 1


class Config:
    LOGGING_FILE_D = os.path.dirname(os.path.dirname(__file__))
    LOGGING_FILE_DIR = os.path.join(LOGGING_FILE_D)
    LOGGING_FILE_NAME = ‘log.log‘
    LOGGING_FILE_PATH = os.path.join(LOGGING_FILE_DIR, LOGGING_FILE_NAME)
    LOGGING_LEVEL = ‘INFO‘
    # LOGGING_FORMAT = ‘{time} [{level}] {message}‘
    LOGGING_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"


settings = Config()

logger.py

  主要是对 Python 原始的 logging 模块进行封装

import os
import sys
import time
import logging
from config import settingsclass Logger:
    def __init__(self, set_level="INFO",
                 name=os.path.split(os.path.splitext(sys.argv[0])[0])[-1],
                 use_console=True):
        """
        :param set_level: 日志级别["NOTSET"|"DEBUG"|"INFO"|"WARNING"|"ERROR"|"CRITICAL"],默认为INFO
        :param name: 日志中打印的name,默认为运行程序的name
        :param log_name: 日志文件的名字,默认为当前时间(年-月-日.log)
        :param log_path: 日志文件夹的路径,默认为logger.py同级目录中的log文件夹
        :param use_console: 是否在控制台打印,默认为True
        """
        if not set_level:
            set_level = self._exec_type()  # 设置set_level为None,自动获取当前运行模式
        self.__logger = logging.getLogger(name)
        self.setLevel(
            getattr(logging, set_level.upper()) if hasattr(logging, set_level.upper()) else logging.INFO)  # 设置日志级别
        if not os.path.exists(settings.LOGGING_FILE_DIR):  # 创建日志目录
            os.makedirs(settings.LOGGING_FILE_DIR)
        formatter = logging.Formatter(settings.LOGGING_FORMAT)
        handler_list = list()
        handler_list.append(logging.FileHandler(settings.LOGGING_FILE_PATH, encoding="utf-8"))
        if use_console:
            handler_list.append(logging.StreamHandler())
        for handler in handler_list:
            handler.setFormatter(formatter)
            self.addHandler(handler)

    def __getattr__(self, item):
        return getattr(self.logger, item)

    @property
    def logger(self):
        return self.__logger

    @logger.setter
    def logger(self, func):
        self.__logger = func

    def _exec_type(self):
        return "DEBUG" if os.environ.get("IPYTHONENABLE") else "INFO"

main.py

  对封装的logger进行调用

from fastapi import FastAPI
import uvicorn
import logger

_logger = logger.Logger(info)
app = FastAPI()


@app.get(/)
def get_a():
    _logger.info(sss)
    return a


if __name__ == __main__:
    uvicorn.run(app, host=127.0.0.1, port=8000)

log.log 打印内容如下

2021-05-08 13:43:07,409 - mian.py[line:11] - INFO: sss
2021-05-08 13:43:08,611 - mian.py[line:11] - INFO: sss
2021-05-08 13:43:10,138 - mian.py[line:11] - INFO: sss

 

Python logger 的使用

原文:https://www.cnblogs.com/lovekt/p/14744996.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!