用于视图的python日志装饰器
发布时间:2020-12-20 13:24:27 所属栏目:Python 来源:网络整理
导读:我想编写装饰器的常用功能如下: 在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 respons
我想编写装饰器的常用功能如下:
在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. 由于某种原因,我的日志消息未显示在文件中. except子句中的“print”消息显示在控制台中.如果我在视图中使用日志消息,它会显示,因此日志记录配置正常.如果有人能指出这一点,我一定会错过一些简单的东西,我会很感激! 感谢名单! 发布日志配置文件: [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,) 解决方法
不要在视图中调用fileConfig:在settings.py中执行此操作,如
my answer中建议的那样.您的视图代码应该只包含用于定义记录器的代码(正如您已经拥有的)以及日志记录调用本身.完成此更改后发布您的发现.
另外,不要在自己的问题上发表评论.您应该能够将问题编辑为例如添加日志配置文件,并且能够比评论中更好地格式化它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |