【问题标题】:django/python loggingdjango/python 日志记录
【发布时间】:2011-09-16 02:40:36
【问题描述】:

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

1) 当我记录 INFO 消息并且 debug=False 时,记录不会发生,我的文件不会被附加。 2)当我记录警告消息和调试 = False 时,日志记录工作完全像我想要的那样,文件被附加 3) 当我记录 INFO 消息并且 debug=True 时,记录似乎工作,文件被附加。

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

views.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 正在发挥作用...

有人有想法吗?

【问题讨论】:

  • 在使用更高的严重性时是否有效?
  • 是的,就像我说的,例如,当我使用警告或错误时它确实有效,但我希望某些消息的 INFO 工作......我不明白了......
  • 看,只有 INFO 缺失:Thu, 2011-06-16 08:45:03 test WARNING test warning Thu, 2011-06-16 08:45:03 test ERROR test error Thu, 2011-06-16 08:45:03 测试关键测试关键

标签: python django logging django-views django-settings


【解决方案1】:

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

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

【讨论】:

  • 确实和你说的有关。 views.py里面的解决方案如下: create_log_file('/opt/test.log', 'testlog') logger_test = logging.getLogger('testlog') logger_test.setLevel(logging.INFO)
猜你喜欢
  • 2010-09-25
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2016-08-27
  • 2018-06-05
  • 2013-09-11
相关资源
最近更新 更多