Обычная функциональность, для которой я хотел бы написать декоратор:
в виде django, у меня есть следующий код:
def view(request):
try:
# do stuff and return success case view response
return render_to_response(...)
except:
# log the exception stack trace and return error case view response
logger.error('...')
return render_to_response('user friendly error message etc.')
Я бы хотел извлечь блок "try", кроме блока, в декоратор. Поэтому я написал что-то вроде следующего:
import logging.config
logging.config.fileConfig(LOGGING_CONFIG_FILE)
logger = logging.getLogger(__name__)
def decorator(view):
def inner(*args, **kwargs):
try:
return view(*args, **kwargs)
except:
exception_traceback = traceback.format_exc(5)
error_message = 'Exception:%s' % exception_traceback
print 'Unexpected error occurred: %s' %(exception_traceback)
logger.error( 'Unexpected error occurred: %s' %(exception_traceback))
return render_to_response('error.json',
{
'message': 'Unexpected system error occured - please contact system administrator'
},
mimetype='text/plain')
return inner
Предположим, что обычно я возвращаю json и в случае успеха.
По какой-то причине мое сообщение не отображается в файле. Сообщение «print» в предложении exc отображается в консоли. Если я использую сообщение регистрации в самом представлении, оно появляется, таким образом, конфигурация регистрации в порядке. Я, должно быть, упускаю что-то простое, если кто-то может указать на это, был бы признателен!
Thanx!
Отправка файла конфигурации регистрации:
[loggers]
keys=root
[logger_root]
handlers=screen,file
level=DEBUG
[formatters]
keys=simple,complex
[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
[formatter_complex]
format=%(asctime)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s
[handlers]
keys=file,screen
[handler_file]
class=handlers.RotatingFileHandler
formatter=complex
level=DEBUG
args=('/tmp/rule150/logs/rule150.log','a',1000000,5)
[handler_screen]
class=StreamHandler
formatter=simple
level=INFO
args=(sys.stdout,)