0

我在 django/python 中使用的日志记录工具有一个非常奇怪的问题。自从我升级到 django 1.3 后,日志记录不再起作用。它似乎与 settings.py 文件中的日志记录级别和 'debug=' 设置有关。

1) 当我记录 INFO 消息并且 debug=False 时,日志不会发生,我的文件不会被附加。2) 当我记录 WARNING 消息和 debug=False 时,日志记录完全按照我的意愿工作,文件被附加 3) 当我记录 INFO 消息和 debug=True 时,日志记录似乎工作,文件被附加。

我如何使用 debug=False 记录 INFO 消息?它在 django 1.3 之前工作......是否有一个神秘的设置可以解决问题?下面有一个示例代码:

视图.py:

import logging

logging.basicConfig(level=logging.INFO,
                format='%(asctime)s %(levelname)s %(message)s',
                filename='/opt/general.log',
                filemode='a')


def create_log_file(filename, log_name, level=logging.INFO):
    handler = logging.handlers.TimedRotatingFileHandler(filename, 'midnight', 7, backupCount=10)
    handler.setLevel(level)
    formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s', '%a, %Y-%m-%d %H:%M:%S')
    handler.setFormatter(formatter)
    logging.getLogger(log_name).addHandler(handler)

create_log_file('/opt/test.log', 'testlog')

logger_test = logging.getLogger('testlog')

logger_test.info('testing the logging functionality')

使用此代码,在 settings.py 文件中将调试设置为 False 的 Django 1.3 中,日志记录不起作用。当我应该这样做时:

logger_test.warning('testing the logging functionality')

当 debug 设置为 False 时,这非常有效。DEBUG 和 INFO 级别不是日志记录,但 WARNING、ERROR 和 CRITICAL 正在完成它们的工作......

有人有想法吗?

4

1 回答 1

3

由于 Django 1.3 包含自己的日志配置,因此您需要确保您所做的任何事情都不会与它发生冲突。例如,如果根记录器在您的模块首次导入时已经由 Django 配置了处理程序,那么您的basicConfig()调用将没有任何效果。

您所描述的是正常的日志记录情况 - 警告及以上得到处理,而 INFO 和 DEBUG 默认情况下被抑制。看起来好像您basicConfig()没有任何效果;您应该考虑在调用时将您的 basicConfig() 调用替换为适当的日志记录配置settings.py,或者至少调查根日志记录级别以及附加到它的处理程序basicConfig()

于 2011-06-16T07:22:54.033 回答