python yaml日志如何在文件夹中创建日志文件

2024-10-02 06:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目结构是

project 
   |
   |---------src
   |          |
   |          |---------logging.py
   |          
   |--------logs.yaml
#logs.yaml

  version: 1
  formatters:
    simple:
      format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  handlers:
    console:
      class: logging.StreamHandler
      level: DEBUG
      formatter: simple
      stream: ext://sys.stdout
    info_file_handler:
      class: logging.handlers.RotatingFileHandler
      level: INFO
      formatter: simple
      filename: /tmp/info.log
      maxBytes: 10485760 # 10MB
      backupCount: 20
      encoding: utf8
    error_file_handler:
      class: logging.handlers.RotatingFileHandler
      level: ERROR
      formatter: simple
      filename: /tmp/errors.log
      maxBytes: 10485760 # 10MB
      backupCount: 20
      encoding: utf8
    missed_eopatch_handler:
      class: logging.handlers.RotatingFileHandler
      level: WARNING
      formatter: simple
      filename: /tmp/eopatch_warnings.log
      maxBytes: 10485760 # 10MB
      backupCount: 20
      encoding: utf8
  loggers:
    missed_eopatch:
      level: WARNING
      handlers: [missed_eopatch_handler, console]
      propagate: no
  root:
    level: INFO
    handlers: [console, info_file_handler, error_file_handler, missed_eopatch_handler]
#logging.py

with open('../logging.yaml', 'r') as f:
    log_cfg = yaml.safe_load(f.read())

logging.config.dictConfig(log_cfg)
logger = logging.getLogger(__name__)

这似乎不会在tmp文件夹中生成任何文件。我在project文件夹或src文件夹中创建了tmp文件夹,但在tmp文件夹中未创建任何日志文件。如果我没有给tmp文件夹,那么日志文件将在src文件夹中创建。我想在project/tmp文件夹下创建日志文件


Tags: 文件文件夹logyamlformatterlogginghandlerssimple
2条回答

您可能在系统的tmp文件夹中创建了日志文件。相对目录../tmp应该可以工作

以“错误文件处理程序”为例。假设您的配置是这样的。唯一的区别是删除了文件名的前导斜杠

    error_file_handler:
      class: logging.handlers.RotatingFileHandler
      level: ERROR
      formatter: simple
      filename: tmp/errors.log
      maxBytes: 10485760 # 10MB
      backupCount: 20
      encoding: utf8

以下是处理此问题的代码:

import os
    
def get_root_dir():
    import __main__ as main
    if main:
        if hasattr(main, '__file__'):
            script_name = os.path.abspath(os.path.join(os.getcwd(), main.__file__))
            script_dir = os.path.dirname(script_name)
        else:
            script_dir = os.getcwd()
    else:
        script_dir = os.getcwd()
    return script_dir
    
#logging.py

with open('../logging.yaml', 'r') as f:
    log_cfg = yaml.safe_load(f.read())

log_name = os.path.join(get_root_dir(), log_cfg['handlers']['error_file_handler']['filename'])
log_cfg['handlers']['error_file_handler']['filename'] = log_name

logging.config.dictConfig(log_cfg)
logger = logging.getLogger(__name__)

相关问题 更多 >

    热门问题