##// END OF EJS Templates
debugging: expose logs/exception when debug log is enabled.
super-admin -
r4768:f604047c default
parent child Browse files
Show More
@@ -154,6 +154,7 b' def not_found_view(request):'
154 154 def error_handler(exception, request):
155 155 import rhodecode
156 156 from rhodecode.lib import helpers
157 from rhodecode.lib.utils2 import str2bool
157 158
158 159 rhodecode_title = rhodecode.CONFIG.get('rhodecode_title') or 'RhodeCode'
159 160
@@ -205,6 +206,8 b' def error_handler(exception, request):'
205 206
206 207 if c.show_exception_id:
207 208 store_exception(c.exception_id, exc_info)
209 c.exception_debug = str2bool(rhodecode.CONFIG.get('debug'))
210 c.exception_config_ini = rhodecode.CONFIG.get('__file__')
208 211
209 212 response = render_to_response(
210 213 '/errors/error_document.mako', {'c': c, 'h': helpers}, request=request,
@@ -125,20 +125,34 b' class ColorFormatter(ExceptionAwareForma'
125 125
126 126 def _inject_req_id(record):
127 127 from pyramid.threadlocal import get_current_request
128 dummy = '00000000-0000-0000-0000-000000000000'
129 req_id = None
130
128 131 req = get_current_request()
129 dummy = '00000000-0000-0000-0000-000000000000'
130 req_id = 'req_id:%-36s' % (getattr(req, 'req_id', dummy))
132 if req:
133 req_id = getattr(req, 'req_id', None)
134
135 req_id = 'req_id:%-36s' % (req_id or dummy)
131 136 record.req_id = req_id
132 137
133 138
139 def _add_log_to_debug_bucket(formatted_record):
140 from pyramid.threadlocal import get_current_request
141 req = get_current_request()
142 if req:
143 req.req_id_bucket.append(formatted_record)
144
145
134 146 class RequestTrackingFormatter(ExceptionAwareFormatter):
135 147 def format(self, record):
136 148 _inject_req_id(record)
137 149 def_record = logging.Formatter.format(self, record)
150 _add_log_to_debug_bucket(def_record)
138 151 return def_record
139 152
140 153
141 154 class ColorRequestTrackingFormatter(ColorFormatter):
155
142 156 def format(self, record):
143 157 """
144 158 Changes record's levelname to use with COLORS enum
@@ -150,6 +164,7 b' class ColorRequestTrackingFormatter(Colo'
150 164 end = RESET_SEQ
151 165
152 166 colored_record = ''.join([start, def_record, end])
167 _add_log_to_debug_bucket(def_record)
153 168 return colored_record
154 169
155 170
@@ -24,6 +24,15 b' from pyramid.request import Request as _'
24 24
25 25
26 26 class Request(_Request):
27 _req_id_bucket = list()
28
27 29 @reify
28 30 def req_id(self):
29 31 return str(uuid4())
32
33 @property
34 def req_id_bucket(self):
35 return self._req_id_bucket
36
37 def req_id_records_init(self):
38 self._req_id_bucket = list()
@@ -106,6 +106,14 b' def add_request_user_context(event):'
106 106 request.environ['rc_req_id'] = req_id
107 107
108 108
109 def reset_log_bucket(event):
110 """
111 reset the log bucket on new request
112 """
113 request = event.request
114 request.req_id_records_init()
115
116
109 117 def scan_repositories_if_enabled(event):
110 118 """
111 119 This is subscribed to the `pyramid.events.ApplicationCreated` event. It
@@ -84,6 +84,24 b''
84 84
85 85 Super-admins can see details of the above error in the exception tracker found under
86 86 <a href="${h.route_url('admin_settings_exception_tracker')}">admin > settings > exception tracker</a>.
87
88 % if c.exception_debug:
89 <pre>
90 <strong>DEBUG MODE ON FOR EXCEPTION: ${c.exception_id}</strong>
91 <strong>REQUEST_ID: ${getattr(request, 'req_id', None)}</strong>
92 ----------------
93 debug mode is controlled by
94 ${c.exception_config_ini}
95 file settings:
96
97 debug = true
98 ----------------
99
100 % for rec in getattr(request, 'req_id_bucket', []):
101 ${rec}
102 % endfor
103 </pre>
104 % endif
87 105 </p>
88 106 </div>
89 107 % endif
@@ -112,6 +112,8 b' def includeme(config):'
112 112 'pyramid.events.NewRequest')
113 113 config.add_subscriber('rhodecode.subscribers.add_localizer',
114 114 'pyramid.events.NewRequest')
115 config.add_subscriber('rhodecode.subscribers.reset_log_bucket',
116 'pyramid.events.NewRequest')
115 117 config.add_subscriber('rhodecode.subscribers.add_request_user_context',
116 118 'pyramid.events.ContextFound')
117 119 config.add_tween('rhodecode.tweens.vcs_detection_tween_factory')
General Comments 0
You need to be logged in to leave comments. Login now