2011-06-16 35 views
0

我有一个很奇怪的问题,我在日志工具里面使用Django/python。由于我升级到django 1.3,日志不再工作。它似乎与logging.py文件中的日志级别和“debug =”设置有关。django/python logging

1)当我登录INFO消息和debug = False时,记录不会发生,我的文件不会被追加。当我登录WARNING消息和debug = 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') 

这段代码的记录不会在Django 1.3与调试在settings.py文件设置为False工作。当我应该这样做:

logger_test.warning('testing the logging functionality') 

当调试设置为False时,此功能完美。级别DEBUG和INFO不记录但警告,错误和严重正在做他们的工作...

有没有人有想法?

+0

使用更高级别时它工作吗? –

+0

是的,这就像我说,当我使用警告或错误,例如它的工作,但我想某些消息的信息工作...我不明白了... – TTT

+0

看,只有信息是缺少的: 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 test CRITICAL测试关键 – TTT

回答

3

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

你所描述的是正常的日志记录情况 - 警告和更高版本得到处理,而INFO和DEBUG默认被禁止。它看起来好像你的basicConfig()没有任何效果;您应该考虑用settings.py中的相应日志记录配置替换您的basicConfig()调用,或者至少在调用basicConfig()时调查根日志记录级别和附加的处理程序。

+0

的确,它与你所说的有关。 view.py中的解决方案如下: create_log_file('/ opt/test.log','testlog') logger_test = logging.getLogger('testlog') logger_test.setLevel(logging.INFO) – TTT