关键词

python logging通过json文件配置的步骤

下面我将详细讲解Python中使用JSON文件配置logging的步骤,包括如何创建JSON文件、配置logging的基本格式以及两条示例说明:

创建JSON文件

首先,我们需要创建一个JSON文件来配置logging。可以使用Python自带的json模块来创建JSON文件,具体操作如下:

import json

config = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'level': 'DEBUG',
            'filename': 'myapp.log',
            'maxBytes': 10485760,
            'backupCount': 5,
            'formatter': 'standard',
        },
    },
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
        },
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True
        }
    }
}

with open('logging.json', 'w') as f:
    json.dump(config, f, indent=4)

这里我们使用了一个Python字典config来表示JSON文件中的内容。其中,version表示logging配置文件版本,disable_existing_loggers表示是否禁用已存在的logger,handlers表示输出处理器的配置,formatters表示输出格式的配置,loggers表示logger的配置。

配置logging的基本格式

有了配置文件,我们就可以在Python代码中使用logging.config.fileConfig()函数进行配置。具体操作如下:

import logging.config

logging.config.fileConfig('logging.json', disable_existing_loggers=False)

logger = logging.getLogger(__name__)
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

这里我们使用了logger对象记录日志,并调用了debug()info()warning()error()critical()方法来记录不同级别的日志信息。

示例说明

下面我们来看两个示例,在这些示例中,我们定义了两种logger,分别对应不同的输出方式和日志级别。具体代码如下:

示例1

假设我们要将错误级别为ERROR以及以上的信息输出到终端和文件中,而将DEBUG级别的信息仅输出到文件中,代码如下:

{
    "version": 1,
    "disable_existing_loggers": false,
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "simple",
            "level": "ERROR",
            "stream": "ext://sys.stderr"
        },
        "file": {
            "class": "logging.FileHandler",
            "filename": "test.log",
            "formatter": "simple",
            "level": "DEBUG"
        }
    },
    "formatters": {
        "simple": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        }
    },
    "loggers": {
        "console": {
            "handlers": ["console"],
            "level": "ERROR"
        },
        "file": {
            "handlers": ["file"],
            "level": "DEBUG"
        }
    }
}

在这个示例中,我们定义了两个handler,“console”用于向终端输出日志信息,而“file”用于向文件输出日志信息。同时,我们定义了两个logger,一个用于向终端输出ERROR级别及以上的日志信息,“file”用于向文件记录所有日志信息。

示例2

接下来,我们来看一个更为复杂的例子,代码如下:

{
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
        "standard": {
            "format": "%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)d)"
        },
        "simple": {
            "format": "%(asctime)s [%(levelname)s] %(message)s"
        }
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "simple",
            "level": "INFO",
            "stream": "ext://sys.stdout"
        },
        "file_debug": {
            "class": "logging.FileHandler",
            "filename": "debug.log",
            "formatter": "standard",
            "level": "DEBUG"
        },
        "file_info": {
            "class": "logging.FileHandler",
            "filename": "info.log",
            "formatter": "standard",
            "level": "INFO"
        },
        "file_error": {
            "class": "logging.FileHandler",
            "filename": "error.log",
            "formatter": "standard",
            "level": "ERROR"
        }
    },
    "loggers": {
        "": {
            "handlers": ["console", "file_debug", "file_info", "file_error"],
            "level": "DEBUG",
            "propagate": true
        },
        "debug": {
            "handlers": ["file_debug"],
            "level": "DEBUG",
            "propagate": false
        },
        "info": {
            "handlers": ["file_info"],
            "level": "INFO",
            "propagate": false
        },
        "error": {
            "handlers": ["file_error"],
            "level": "ERROR",
            "propagate": false
        }
    }
}

在这个示例中,我们定义了三个handler,“console”用于向终端输出日志信息,而“file_debug”、“file_info”、“file_error”,分别用于向文件输出DEBUG、INFO、ERROR级别的日志信息。同时,我们定义了四个logger,一个用于向终端输出所有DEBUG级别以上的日志信息,而“debug”、“info”、“error”则分别用于记录DEBUG、INFO、ERROR级别的日志信息。

总结

这就是使用JSON文件配置logging的完整攻略,通过创建JSON文件和配置logging的基本格式,我们可以灵活地定义不同的日志记录方式和级别,并根据需要将日志信息输出到终端或文件中。同时,使用JSON文件配置logging也可避免在代码中硬编码logging的细节,使代码更加简洁和易于维护。

本文链接:http://task.lmcjl.com/news/14799.html

展开阅读全文