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

python yaml日志记录-如何在文件夹中创建日志文件,python,yaml,Python,Yaml,我的项目结构是 project | |---------src | | | |---------logging.py | |--------logs.yaml 这似乎不会在tmp文件夹中生成任何文件。我在project文件夹或src文件夹中创建了tmp文件夹,但在tmp文件夹中没有创建日志文件。如果我没有给出tmp文件夹,那么日志文件将在src文件夹中创建。我想在项目/tmp文件夹下创建日志文件您可能

我的项目结构是

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

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

您可能在系统的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__)

从您的配置来看,日志应该在/tmp下。如果您想在项目目录下动态获取tmp,可以在加载日志yaml文件后分配一个“文件名”。
    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__)