##// END OF EJS Templates
timperproxy will just measure the time of queries, and formatting will be handled by the new sql_formatter of queries from sqlalchemy itself. Updated ini files for new way logging
marcink -
r1186:b9ea10d3 beta
parent child Browse files
Show More
@@ -143,21 +143,21 b' logview.pylons.util = #eee'
143 143 #########################################################
144 144 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
145 145 sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode
146 #sqlalchemy.db1.echo = False
147 #sqlalchemy.db1.pool_recycle = 3600
146 sqlalchemy.db1.echo = True
147 sqlalchemy.db1.pool_recycle = 3600
148 148 sqlalchemy.convert_unicode = true
149 149
150 150 ################################
151 151 ### LOGGING CONFIGURATION ####
152 152 ################################
153 153 [loggers]
154 keys = root, routes, rhodecode, sqlalchemy,beaker,templates
154 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
155 155
156 156 [handlers]
157 keys = console
157 keys = console, console_sql
158 158
159 159 [formatters]
160 keys = generic,color_formatter
160 keys = generic, color_formatter, color_formatter_sql
161 161
162 162 #############
163 163 ## LOGGERS ##
@@ -168,32 +168,32 b' handlers = console'
168 168
169 169 [logger_routes]
170 170 level = DEBUG
171 handlers = console
171 handlers =
172 172 qualname = routes.middleware
173 173 # "level = DEBUG" logs the route matched and routing variables.
174 propagate = 0
174 propagate = 1
175 175
176 176 [logger_beaker]
177 level = ERROR
178 handlers = console
177 level = DEBUG
178 handlers =
179 179 qualname = beaker.container
180 propagate = 0
180 propagate = 1
181 181
182 182 [logger_templates]
183 183 level = INFO
184 handlers = console
184 handlers =
185 185 qualname = pylons.templating
186 propagate = 0
186 propagate = 1
187 187
188 188 [logger_rhodecode]
189 189 level = DEBUG
190 handlers = console
190 handlers =
191 191 qualname = rhodecode
192 propagate = 0
192 propagate = 1
193 193
194 194 [logger_sqlalchemy]
195 level = ERROR
196 handlers = console
195 level = INFO
196 handlers = console_sql
197 197 qualname = sqlalchemy.engine
198 198 propagate = 0
199 199
@@ -207,6 +207,12 b' args = (sys.stderr,)'
207 207 level = NOTSET
208 208 formatter = color_formatter
209 209
210 [handler_console_sql]
211 class = StreamHandler
212 args = (sys.stderr,)
213 level = NOTSET
214 formatter = color_formatter_sql
215
210 216 ################
211 217 ## FORMATTERS ##
212 218 ################
@@ -218,4 +224,9 b' datefmt = %Y-%m-%d %H:%M:%S'
218 224 [formatter_color_formatter]
219 225 class=rhodecode.lib.colored_formatter.ColorFormatter
220 226 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
227 datefmt = %Y-%m-%d %H:%M:%S
228
229 [formatter_color_formatter_sql]
230 class=rhodecode.lib.colored_formatter.ColorFormatterSql
231 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
221 232 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -29,7 +29,7 b' debug = true'
29 29 threadpool_workers = 5
30 30
31 31 ##max request before thread respawn
32 threadpool_max_requests = 6
32 threadpool_max_requests = 10
33 33
34 34 ##option to use threads of process
35 35 use_threadpool = true
@@ -41,13 +41,14 b' port = 8001'
41 41 [app:main]
42 42 use = egg:rhodecode
43 43 full_stack = true
44 static_files = false
44 static_files = true
45 45 lang=en
46 46 cache_dir = %(here)s/data
47 47 index_dir = %(here)s/data/index
48 app_instance_uuid = prod1234
48 49 cut_off_limit = 256000
49 force_https = false
50 commit_parse_limit = 25
50 force_https = false
51 commit_parse_limit = 50
51 52 use_gravatar = true
52 53
53 54 ####################################
@@ -142,57 +143,57 b' logview.pylons.util = #eee'
142 143 #########################################################
143 144 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
144 145 sqlalchemy.db1.url = postgresql://postgres:qwe@localhost/rhodecode
145 #sqlalchemy.db1.echo = False
146 #sqlalchemy.db1.pool_recycle = 3600
146 sqlalchemy.db1.echo = True
147 sqlalchemy.db1.pool_recycle = 3600
147 148 sqlalchemy.convert_unicode = true
148 149
149 150 ################################
150 151 ### LOGGING CONFIGURATION ####
151 152 ################################
152 153 [loggers]
153 keys = root, routes, rhodecode, sqlalchemy,beaker,templates
154 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
154 155
155 156 [handlers]
156 keys = console
157 keys = console, console_sql
157 158
158 159 [formatters]
159 keys = generic,color_formatter
160 keys = generic, color_formatter, color_formatter_sql
160 161
161 162 #############
162 163 ## LOGGERS ##
163 164 #############
164 165 [logger_root]
165 level = INFO
166 level = NOTSET
166 167 handlers = console
167 168
168 169 [logger_routes]
169 level = INFO
170 handlers = console
170 level = DEBUG
171 handlers =
171 172 qualname = routes.middleware
172 173 # "level = DEBUG" logs the route matched and routing variables.
173 propagate = 0
174 propagate = 1
174 175
175 176 [logger_beaker]
176 level = ERROR
177 handlers = console
177 level = DEBUG
178 handlers =
178 179 qualname = beaker.container
179 propagate = 0
180 propagate = 1
180 181
181 182 [logger_templates]
182 183 level = INFO
183 handlers = console
184 handlers =
184 185 qualname = pylons.templating
185 propagate = 0
186 propagate = 1
186 187
187 188 [logger_rhodecode]
188 189 level = DEBUG
189 handlers = console
190 handlers =
190 191 qualname = rhodecode
191 propagate = 0
192 propagate = 1
192 193
193 194 [logger_sqlalchemy]
194 level = ERROR
195 handlers = console
195 level = INFO
196 handlers = console_sql
196 197 qualname = sqlalchemy.engine
197 198 propagate = 0
198 199
@@ -203,9 +204,15 b' propagate = 0'
203 204 [handler_console]
204 205 class = StreamHandler
205 206 args = (sys.stderr,)
206 level = NOTSET
207 level = INFO
207 208 formatter = color_formatter
208 209
210 [handler_console_sql]
211 class = StreamHandler
212 args = (sys.stderr,)
213 level = WARN
214 formatter = color_formatter_sql
215
209 216 ################
210 217 ## FORMATTERS ##
211 218 ################
@@ -217,4 +224,9 b' datefmt = %Y-%m-%d %H:%M:%S'
217 224 [formatter_color_formatter]
218 225 class=rhodecode.lib.colored_formatter.ColorFormatter
219 226 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
227 datefmt = %Y-%m-%d %H:%M:%S
228
229 [formatter_color_formatter_sql]
230 class=rhodecode.lib.colored_formatter.ColorFormatterSql
231 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
220 232 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -142,57 +142,57 b' logview.pylons.util = #eee'
142 142 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
143 143 #########################################################
144 144 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
145 #sqlalchemy.db1.echo = False
146 #sqlalchemy.db1.pool_recycle = 3600
145 sqlalchemy.db1.echo = True
146 sqlalchemy.db1.pool_recycle = 3600
147 147 sqlalchemy.convert_unicode = true
148 148
149 149 ################################
150 150 ### LOGGING CONFIGURATION ####
151 151 ################################
152 152 [loggers]
153 keys = root, routes, rhodecode, sqlalchemy,beaker,templates
153 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
154 154
155 155 [handlers]
156 keys = console
156 keys = console, console_sql
157 157
158 158 [formatters]
159 keys = generic,color_formatter
159 keys = generic, color_formatter, color_formatter_sql
160 160
161 161 #############
162 162 ## LOGGERS ##
163 163 #############
164 164 [logger_root]
165 level = INFO
165 level = NOTSET
166 166 handlers = console
167 167
168 168 [logger_routes]
169 level = INFO
170 handlers = console
169 level = DEBUG
170 handlers =
171 171 qualname = routes.middleware
172 172 # "level = DEBUG" logs the route matched and routing variables.
173 propagate = 0
173 propagate = 1
174 174
175 175 [logger_beaker]
176 level = ERROR
177 handlers = console
176 level = DEBUG
177 handlers =
178 178 qualname = beaker.container
179 propagate = 0
179 propagate = 1
180 180
181 181 [logger_templates]
182 182 level = INFO
183 handlers = console
183 handlers =
184 184 qualname = pylons.templating
185 propagate = 0
185 propagate = 1
186 186
187 187 [logger_rhodecode]
188 188 level = DEBUG
189 handlers = console
189 handlers =
190 190 qualname = rhodecode
191 propagate = 0
191 propagate = 1
192 192
193 193 [logger_sqlalchemy]
194 level = ERROR
195 handlers = console
194 level = INFO
195 handlers = console_sql
196 196 qualname = sqlalchemy.engine
197 197 propagate = 0
198 198
@@ -203,9 +203,15 b' propagate = 0'
203 203 [handler_console]
204 204 class = StreamHandler
205 205 args = (sys.stderr,)
206 level = NOTSET
206 level = INFO
207 207 formatter = color_formatter
208 208
209 [handler_console_sql]
210 class = StreamHandler
211 args = (sys.stderr,)
212 level = WARN
213 formatter = color_formatter_sql
214
209 215 ################
210 216 ## FORMATTERS ##
211 217 ################
@@ -217,4 +223,9 b' datefmt = %Y-%m-%d %H:%M:%S'
217 223 [formatter_color_formatter]
218 224 class=rhodecode.lib.colored_formatter.ColorFormatter
219 225 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
226 datefmt = %Y-%m-%d %H:%M:%S
227
228 [formatter_color_formatter_sql]
229 class=rhodecode.lib.colored_formatter.ColorFormatterSql
230 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
220 231 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -14,8 +14,35 b' COLORS = {'
14 14 'WARNING': CYAN, # level 30
15 15 'INFO': GREEN, # level 20
16 16 'DEBUG': BLUE, # level 10
17 'SQL' : YELLOW
17 18 }
18 19
20 def one_space_trim(s):
21 if s.find(" ") == -1:
22 return s
23 else:
24 s = s.replace(' ', ' ')
25 return one_space_trim(s)
26
27 def format_sql(sql):
28 sql = sql.replace('\n', '')
29 sql = one_space_trim(sql)
30 sql = sql\
31 .replace(',', ',\n\t')\
32 .replace('SELECT', '\n\tSELECT \n\t')\
33 .replace('UPDATE', '\n\tUPDATE \n\t')\
34 .replace('DELETE', '\n\tDELETE \n\t')\
35 .replace('FROM', '\n\tFROM')\
36 .replace('ORDER BY', '\n\tORDER BY')\
37 .replace('LIMIT', '\n\tLIMIT')\
38 .replace('WHERE', '\n\tWHERE')\
39 .replace('AND', '\n\tAND')\
40 .replace('LEFT', '\n\tLEFT')\
41 .replace('INNER', '\n\tINNER')\
42 .replace('INSERT', '\n\tINSERT')\
43 .replace('DELETE', '\n\tDELETE')
44 return sql
45
19 46 class ColorFormatter(logging.Formatter):
20 47
21 48 def __init__(self, *args, **kwargs):
@@ -26,13 +53,31 b' class ColorFormatter(logging.Formatter):'
26 53 """
27 54 Changes record's levelname to use with COLORS enum
28 55 """
29
56
30 57 levelname = record.levelname
31 58 start = COLOR_SEQ % (COLORS[levelname])
32 59 def_record = logging.Formatter.format(self, record)
33 60 end = RESET_SEQ
34
61
35 62 colored_record = start + def_record + end
36 63 return colored_record
37 64
38 logging.ColorFormatter = ColorFormatter
65
66 class ColorFormatterSql(logging.Formatter):
67
68 def __init__(self, *args, **kwargs):
69 # can't do super(...) here because Formatter is an old school class
70 logging.Formatter.__init__(self, *args, **kwargs)
71
72 def format(self, record):
73 """
74 Changes record's levelname to use with COLORS enum
75 """
76
77 start = COLOR_SEQ % (COLORS['SQL'])
78 def_record = format_sql(logging.Formatter.format(self, record))
79 end = RESET_SEQ
80
81 colored_record = start + def_record + end
82 return colored_record
83
@@ -7,53 +7,22 b' def color_sql(sql):'
7 7 COLOR_SEQ = "\033[1;%dm"
8 8 COLOR_SQL = YELLOW
9 9 normal = '\x1b[0m'
10 return COLOR_SEQ % COLOR_SQL + sql + normal
11
12 def one_space_trim(s):
13 if s.find(" ") == -1:
14 return s
15 else:
16 s = s.replace(' ', ' ')
17 return one_space_trim(s)
18
19 def format_sql(sql):
20 sql = color_sql(sql)
21 sql = sql.replace('\n', '')
22 sql = one_space_trim(sql)
23 sql = sql\
24 .replace(',', ',\n\t')\
25 .replace('SELECT', '\n\tSELECT \n\t')\
26 .replace('UPDATE', '\n\tUPDATE \n\t')\
27 .replace('DELETE', '\n\tDELETE \n\t')\
28 .replace('FROM', '\n\tFROM')\
29 .replace('ORDER BY', '\n\tORDER BY')\
30 .replace('LIMIT', '\n\tLIMIT')\
31 .replace('WHERE', '\n\tWHERE')\
32 .replace('AND', '\n\tAND')\
33 .replace('LEFT', '\n\tLEFT')\
34 .replace('INNER', '\n\tINNER')\
35 .replace('INSERT', '\n\tINSERT')\
36 .replace('DELETE', '\n\tDELETE')
37 return sql
38
10 return COLOR_SEQ % COLOR_SQL + sql + normal
39 11
40 12 class TimerProxy(ConnectionProxy):
41
13
42 14 def __init__(self):
43 15 super(TimerProxy, self).__init__()
44 16 self.logging_name = 'timerProxy'
45 17 self.log = log.instance_logger(self, True)
46
47 def cursor_execute(self, execute, cursor, statement, parameters, context, executemany):
48
18
19 def cursor_execute(self, execute, cursor, statement, parameters,
20 context, executemany):
21
49 22 now = time.time()
50 23 try:
51 self.log.info(">>>>> STARTING QUERY >>>>>")
24 self.log.info(color_sql(">>>>> STARTING QUERY >>>>>"))
52 25 return execute(cursor, statement, parameters, context)
53 26 finally:
54 27 total = time.time() - now
55 try:
56 self.log.info(format_sql("Query: %s" % statement % parameters))
57 except TypeError:
58 self.log.info(format_sql("Query: %s %s" % (statement, parameters)))
59 self.log.info("<<<<< TOTAL TIME: %f <<<<<" % total)
28 self.log.info(color_sql("<<<<< TOTAL TIME: %f <<<<<" % total))
General Comments 0
You need to be logged in to leave comments. Login now