Python日志文件yaml配置写到log文件以时间

在软件开发中,日志文件是一个非常重要的组件,它可以帮助开发人员快速定位和解决问题。而Python中的logging模块可以方便地实现日志记录功能,并且可以将日志信息写入文件中。本文将介绍如何使用yaml配置文件来配置日志记录,并将日志信息写入文件,并且以时间为文件名。

使用yaml配置文件配置日志记录

首先,我们需要一个yaml配置文件来配置日志记录的相关信息。下面是一个简单的示例yaml配置文件:

version: 1
formatters:
  simple:
    format: '%(asctime)s - %(levelname)s - %(message)s'
handlers:
  file_handler:
    class: logging.FileHandler
    level: INFO
    formatter: simple
    filename: logs/myapp.log
loggers:
  my_logger:
    level: INFO
    handlers: [file_handler]
    propagate: no
root:
  level: INFO
  handlers: [file_handler]

在这个配置文件中,我们定义了一个简单的格式化器simple,一个文件处理器file_handler,一个loggermy_logger,并将文件处理器和logger进行关联。

使用Python代码载入yaml配置文件

接下来,我们需要使用Python代码来载入yaml配置文件,并将日志记录器进行配置。下面是一个示例代码:

import logging.config
import yaml

def setup_logging():
    with open('logging_config.yaml', 'r') as f:
        config = yaml.safe_load(f.read())
        logging.config.dictConfig(config)

def main():
    setup_logging()
    logger = logging.getLogger('my_logger')
    logger.info('This is a test log message')

if __name__ == '__main__':
    main()

在这段代码中,我们使用yaml模块来读取yaml配置文件,然后使用logging.config.dictConfig()方法来配置日志记录器。最后,我们使用logging.getLogger()方法来获取一个名为my_logger的logger,并记录一条测试日志信息。

将日志信息写入文件并以时间为文件名

接下来,我们将日志信息写入文件,并以时间为文件名保存。我们可以使用Python的datetime模块来获取当前时间,并根据时间创建日志文件。下面是一个示例代码:

import logging
import logging.config
import yaml
from datetime import datetime

def setup_logging():
    with open('logging_config.yaml', 'r') as f:
        config = yaml.safe_load(f.read())
        logging.config.dictConfig(config)

def main():
    setup_logging()
    logger = logging.getLogger('my_logger')
    
    # 获取当前时间
    now = datetime.now()
    current_time = now.strftime("%Y-%m-%d_%H-%M-%S")
    
    # 创建日志文件
    filename = f'logs/myapp_{current_time}.log'
    
    # 创建文件处理器
    file_handler = logging.FileHandler(filename)
    file_handler.setLevel(logging.INFO)
    
    # 添加文件处理器到logger
    logger.addHandler(file_handler)
    
    logger.info('This is a test log message')

if __name__ == '__main__':
    main()

在这段代码中,我们首先获取当前时间,并以年月日时分秒的格式保存到current_time变量中。然后,根据当前时间创建日志文件名myapp_YYYY-MM-DD_HH-MM-SS.log。接着,创建一个文件处理器,并将其添加到logger中。最后,记录一条测试日志信息。

序列图示例

下面是一个简单的序列图示例,展示了以上代码的执行流程:

sequenceDiagram
    participant User
    participant Python
    participant YAML
    User ->> Python: 运行Python代码
    Python ->> YAML: 读取logging配置文件
    YAML -->> Python: 返回配置信息
    Python ->> Python: 配置日志记录器
    Python ->> Python: 获取当前时间
    Python ->> Python: 创建日志文件
    Python ->> Python: 创建文件处理器
    Python -->> Python: 将文件处理器添加到logger
    Python ->> Python: 记录测试日志信息

饼状图示例

下面是一个简单的饼状图示例,展示了日志级别的分布情况:

pie
    title 日志级别分布
    "INFO" : 50
    "ERROR" : 30
    "WARN" : 10
    "DEBUG" : 10
``