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__)