2014-10-06 53 views
0

我一直在試圖用我自己的腳本記錄器(https://docs.python.org/2/library/logging.html),現在通過出色的後利用ianalexander Django的設置,在這裏:Python的日誌到標準輸出,而不是文件中指定

http://ianalexandr.com/blog/getting-started-with-django-logging-in-5-minutes.html

但在這兩種情況下,同樣的問題依然存在。我的錯誤消息出現在STDOUT中。 。啓動服務器的命令行。 。而不是在提到的文件中。然而,有趣的是文件被創建。有沒有人知道爲什麼這些文件可以打開但不能寫入?

有趣的是,當我通過命令行調用我自己的腳本時,這是不正確的,所以我很可能使用django。

這些是我的django設置,帶有註釋掉的部分和全部。任何幫助是極大的讚賞!

謝謝!

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'formatters': { 
    'verbose': { 
     'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", 
     'datefmt' : "%d/%b/%Y %H:%M:%S" 
    }, 
    'simple': { 
     'format': '%(levelname)s %(message)s' 
    }, 
}, 
# 'handlers': { 
#  'file': { 
#   'level': 'DEBUG', 
#   'class': 'logging.FileHandler', 
#   'filename': '/path/to/django/debug.log', 
#  }, 
# }, 
'handlers': { 
    'main_file': { 
     'level': 'DEBUG', 
     'class': 'logging.FileHandler', 
     'filename': 'django_main.log', 
     'formatter': 'verbose' 
    }, 
}, 

# 'filters': { 
#  'special': { 
#   '()': 'project.logging.SpecialFilter', 
#   'foo': 'bar', 
#  } 
# }, 

# 'loggers': { 
#  'django.request': { 
#   'handlers': ['file'], 
#   'level': 'DEBUG', 
#   'propagate': True, 
#  }, 
# }, 
'loggers': { 
    'django': { 
     'handlers':['main_file'], 
     'propagate': True, 
     'level':'DEBUG', 
    }, 
    'jira4': { ##MYAPP 
     'handlers': ['main_file'], 
     'level': 'DEBUG', 
    }, 
} 

}

每請求,這是我寫的使用Django的系統外日誌代碼:

def set_logs(self, log_name = 'main_log', dir_name = 'logs', base_name = 'log'): 

    print " .. . . SETTING LOGS!" 
    this_logger = logging.getLogger(log_name) 

    this_logger.setLevel(logging.DEBUG) ## Basicallty all 
    #logger.setLevel(logging.INFO) 

    # create file handler which logs even debug messages 
    fhe = logging.FileHandler('logs/tick_ERR.log') 
    fhe.setLevel(logging.ERROR) 

    fhw = logging.FileHandler(dir_name + '/' +base_name+ '_WARN.log', 'w') 
    fhw.setLevel(logging.WARNING) 

    fhc = logging.FileHandler(dir_name + '/' +base_name+ '_CRITICAL.log', 'w') 
    fhc.setLevel(logging.CRITICAL) 

    fhd = logging.FileHandler(dir_name + '/' +base_name+ '_DEBUG.log') 
    fhd.setLevel(logging.DEBUG) 

    fhi = logging.FileHandler(dir_name + '/' +base_name+ '_INFO.log') 
    fhi.setLevel(logging.INFO) 

    # create console handler with a higher log level 
    # ch = logging.StreamHandler() 
    # ch.setLevel(logging.ERROR) 
    # create formatter and add it to the handlers 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s : %(message)s') 
    fhe.setFormatter(formatter) 
    fhw.setFormatter(formatter) 
    fhc.setFormatter(formatter) 
    fhd.setFormatter(formatter) 
    fhi.setFormatter(formatter) 

    # ch.setFormatter(formatter) 
    # add the handlers to the logger 
    this_logger.addHandler(fhe) 
    this_logger.addHandler(fhw) 
    this_logger.addHandler(fhc) 
    this_logger.addHandler(fhd) 
    this_logger.addHandler(fhi) 

    return this_logger 

再後來我打電話

this_logger = logging.getLogger(log_name) 

    print "Got logger: " 
    pp.pprint(this_logger) 


    this_logger.critical(test_flag + " __________________3__________ IS THI IN ALL ? ___________3_________") 
    this_logger.critical(test_flag + " THIS IS CRITICAL!! ") 

    this_logger.error(test_flag + " THIS IS A DARN ERROR! ") 

的有趣的是,當我在本地文件中使用幾乎相同的代碼並通過cmd行調用時,它就工作了。什麼是不允許我寫的django環境允許我創建這些日誌文件?

+1

您能顯示一些代碼嗎?可能你沒有正確使用'loggging'? – avi 2014-10-06 07:14:28

+0

非常感謝您閱讀本文。它讓我陷入了嚴重的損失! – 2014-10-06 07:31:02

回答

0

我試過你的代碼,它看起來像記錄器名稱需要修改。

這是一個很好的做法把在你的文件views.py

import logging 
log = logging.getLogger(__name__) 

你的情況這將是如jira4.views.py

this_logger = logging.getLogger(__name__) # __name__ will produce jira4.views 

如果您的應用程序名爲jira4,那麼日誌應該開始正常工作。

另請參閱Naming Python loggers

相關問題