python输出json类型日志

一、背景

在开发和维护大型应用程序时,日志记录是至关重要的。它可以帮我们追踪问题、监控系统状态、分析用户行为等。然而,传统的日志记录方式存在一些问题,如日志格式不统一、难以集中管理、无法高效地进行日志分析等。

  • 统一的日志格式:
    通过这个工具,所有的日志都以结构化的JSON格式输出。无论是在本地开发环境还是在生产环境中,日志格式都保持一致,便于后续的解析和分析。
  • 与EFK栈的无缝集成:
    生成的JSON格式日志可以直接被Fluentd解析,并发送到Elasticsearch进行存储。通过Kibana,我们可以方便地查看和分析这些日志数据,实现日志的集中管理和可视化。这种方式不仅提高了日志管理的效率,还简化了日志分析的过程,使我们能够更快地发现和解决问题。
# coding:utf-8
# -*- coding: gbk -*-
import os
import sys

from loguru import logger
from resource.ProfileLoad import initialize_environ

# 初始化配置文件
initialize_environ()


def log_filter(level):
    """日志级别过滤器"""
    return lambda record: record["level"].name == level


class LoggerSingleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(LoggerSingleton, cls).__new__(cls)
            cls._instance.initialize_logger()
        return cls._instance

    @classmethod
    def initialize_logger(cls):
        log_path = os.getenv('LOG_FILE', "D://log")

        # 生产环境则不输出日志到控制台
        if os.environ.get('ENVIRONMENT') == 'production':
            logger.remove()
        else:
            # 保留控制台输出
            logger.add(sys.stderr, level="DEBUG")

        # 配置不同级别的日志处理器
        for level in ['INFO', 'WARNING', 'ERROR']:
            logger.add(
                f"{log_path}/{level.lower()}_" + "{time:YYYY-MM-DD}.log",
                level=level,
                rotation="daily",
                serialize=True,
                filter=log_filter(level)
            )

        # 禁止日志传播到父日志记录器
        logger.propagate = False

    @classmethod
    def get_logger(cls):
        if not cls._instance:
            cls._instance = cls()
        return logger


# 创建一个全局的 logger 实例
logger = LoggerSingleton().get_logger()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容