在python日志记录配置文件中使用程序变量

kh

我正在尝试使用以下命令启用python日志记录:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.config
import os
test_filename = 'my_log_file.txt'
try:
    logging.config.fileConfig('loggingpy.conf', disable_existing_loggers=False)
except Exception as e:
    # try to set up a default logger
    logging.error("No loggingpy.conf to parse", exc_info=e)
    logging.basicConfig(level=logging.WARNING, format="%(asctime)-15s %(message)s")
test1_log = logging.getLogger("test1")
test1_log.critical("test1_log crit")
test1_log.error("test1_log error")
test1_log.warning("test1_log warning")
test1_log.info("test1_log info")
test1_log.debug("test1_log debug")

我想使用logginglog.conf文件来控制日志记录,如下所示:

[loggers]
keys=root

[handlers]
keys=handRoot

[formatters]
keys=formRoot

[logger_root]
level=INFO
handlers=handRoot

[handler_handRoot]
class=FileHandler
level=INFO
formatter=formRoot
args=(test_filename,)

[formatter_formRoot]
format=%(asctime)s:%(name)s:%(process)d:%(lineno)d %(levelname)s %(message)s
datefmt=
class=logging.Formatter

在这里,我试图将日志记录路由到本地“ test_filename”命名的文件。运行此命令时,我得到:

ERROR:root:No loggingpy.conf to parse
Traceback (most recent call last):
  File "logging_test.py", line 8, in <module>
    logging.config.fileConfig('loggingpy.conf', disable_existing_loggers=False)
  File "/usr/lib/python2.7/logging/config.py", line 85, in fileConfig
    handlers = _install_handlers(cp, formatters)
  File "/usr/lib/python2.7/logging/config.py", line 162, in _install_handlers
    args = eval(args, vars(logging))
  File "<string>", line 1, in <module>
NameError: name 'test_filename' is not defined
CRITICAL:test1:test1_log crit
ERROR:test1:test1_log error
WARNING:test1:test1_log warning

阅读文档后,似乎配置中的“ args”值是在日志包名称空间的上下文中评估的,而不是在调用fileConfig的上下文中评估的。是否有任何体面的方法尝试通过配置文件使日志记录以这种方式运行,因此我可以配置动态日志文件名(通常类似于“ InputFile.log”),但仍然可以灵活地使用日志记录配置文件进行更改它?

史蒂夫·哈特

您可以使用以下命令将文件名放在日志记录名称空间中:

logging.test_filename = 'my_log_file.txt'

然后,您现有的loggingpy.conf文件应该可以工作

您应该能够在您的模块中使用您喜欢的任何内容来污染日志记录命名空间(原因是-我不会尝试logging.config ='something'),并且应该使它可以被config文件引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章