├── .idea ├── other.xml └── testrunner.xml ├── config-examples ├── send-config-to-listener.py ├── logging-listener.py ├── logging.cfg └── logging.yaml ├── http_handler-example.py ├── tornado-apps ├── http-handler-accept.py └── buffered-log-handler.py ├── smtp-handler-example.py └── svgs ├── fib-svg-no-logger.svg ├── fib-svg-no-logger-p3.svg ├── fib-svg-logging-p2.svg ├── fib-svg-logger-p2.svg └── fib-svg-logger-debug-p2.svg /.idea/other.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/testrunner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /config-examples/send-config-to-listener.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import logging.config 4 | import socket 5 | import struct 6 | 7 | HOST = 'localhost' 8 | PORT = logging.config.DEFAULT_LOGGING_CONFIG_PORT # 9030 9 | 10 | 11 | def send_conf(config_text): 12 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13 | s.connect((HOST, PORT)) 14 | s.send(struct.pack('>L', len(config_text))) 15 | s.send(config_text) 16 | s.close() 17 | 18 | with open('logging.cfg', 'r') as handle: 19 | send_conf(handle.read()) 20 | -------------------------------------------------------------------------------- /config-examples/logging-listener.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import logging 3 | import logging.config 4 | import time 5 | 6 | logging.basicConfig(level=logging.INFO) 7 | 8 | # Listen on default port of 9030, is a thread 9 | listener = logging.config.listen() 10 | listener.start() 11 | 12 | logger = logging.getLogger('listener') 13 | 14 | start_time = time.time() 15 | while True: 16 | logger.info('Time since start: %.2f', time.time() - start_time) 17 | try: 18 | time.sleep(1) 19 | except KeyboardInterrupt: 20 | logging.config.stopListening() 21 | break 22 | -------------------------------------------------------------------------------- /config-examples/logging.cfg: -------------------------------------------------------------------------------- 1 | [loggers] 2 | keys = root, listener 3 | 4 | [logger_listener] 5 | level = INFO 6 | handlers = console 7 | propagate = 1 8 | qualname = listener 9 | 10 | [logger_root] 11 | level = WARNING 12 | handlers = console 13 | propagate = 1 14 | 15 | [handlers] 16 | keys = console, syslog 17 | 18 | [handler_console] 19 | class = StreamHandler 20 | formatter = brief 21 | stream = ext://sys.stdout 22 | args = () 23 | 24 | [handler_syslog] 25 | class = handlers.SysLogHandler 26 | formatter = brief 27 | args = ('/var/run/syslog', handlers.SysLogHandler.LOG_LOCAL6) 28 | 29 | [formatters] 30 | keys = brief 31 | 32 | [formatter_brief] 33 | format = %(name)s.%(funcName)s(): %(message)s 34 | -------------------------------------------------------------------------------- /http_handler-example.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import logging 3 | from logging import handlers 4 | import socket 5 | import traceback 6 | 7 | HOST = 'localhost' 8 | PORT = 8888 9 | 10 | # Setup logging 11 | logging.basicConfig(level=logging.INFO) 12 | 13 | handler = handlers.HTTPHandler('%s:%s' % (HOST, PORT), '/') 14 | http_logger = logging.getLogger('http.example') 15 | http_logger.addHandler(handler) 16 | http_logger.setLevel = logging.CRITICAL 17 | 18 | logging.info('Root logger output') 19 | try: 20 | http_logger.critical('Critical Event Notification\n\nTraceback:\n %s', 21 | ''.join(traceback.format_stack())) 22 | except socket.error as error: 23 | logging.critical('Could not deliver message via HTTPHandler: %r', error) 24 | -------------------------------------------------------------------------------- /tornado-apps/http-handler-accept.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import logging 3 | from tornado import ioloop, web 4 | 5 | 6 | class WebRequestHandler(web.RequestHandler): 7 | """Accepts HTTPHandler POSTs 8 | 9 | """ 10 | def get(self): 11 | """Return a JSON document of the log entries and flush the 12 | BufferedLogHandler if there is a flush argument in the URL. 13 | 14 | """ 15 | values = {k: ''.join(v) for k, v in self.request.arguments.iteritems()} 16 | logging.info('HTTPHandler data: %r', values) 17 | self.set_status(204) 18 | 19 | if __name__ == '__main__': 20 | logging.basicConfig(level=logging.INFO) 21 | routes = [(r'.*', WebRequestHandler)] 22 | application = web.Application(routes) 23 | application.listen(8888) 24 | ioloop.IOLoop.instance().start() 25 | -------------------------------------------------------------------------------- /config-examples/logging.yaml: -------------------------------------------------------------------------------- 1 | Logging: 2 | formatters: 3 | brief: 4 | format: "%(levelname)s %(name)s.%(funcName)s(): %(message)s" 5 | filters: [] 6 | handlers: 7 | console: 8 | class: logging.StreamHandler 9 | formatter: brief 10 | syslog: 11 | class: logging.handlers.SysLogHandler 12 | facility: daemon 13 | address: /dev/log 14 | formatter: brief 15 | loggers: 16 | django: 17 | propagate: true 18 | level: WARNING 19 | handlers: [console, syslog] 20 | psycopg2: 21 | propagate: false 22 | level: ERROR 23 | handlers: [console, syslog] 24 | ROOT: 25 | propagate: true 26 | level: WARNING 27 | handlers: [console, syslog] 28 | disable_existing_loggers: true 29 | incremental: false 30 | version: 1 31 | -------------------------------------------------------------------------------- /smtp-handler-example.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import logging 3 | from logging import handlers 4 | import socket 5 | import traceback 6 | 7 | HOST = 'localhost' 8 | FROM = '"APPLICATION ALERT" ' 9 | TO = 'you@your-domain' 10 | SUBJECT = 'New Critical Event From [APPLICATION]' 11 | 12 | # Setup logging 13 | logging.basicConfig(level=logging.INFO) 14 | 15 | handler = handlers.SMTPHandler(HOST, FROM, TO, SUBJECT) 16 | email_logger = logging.getLogger('smtp.example') 17 | email_logger.addHandler(handler) 18 | email_logger.setLevel = logging.CRITICAL 19 | 20 | logging.info('Root logger output') 21 | try: 22 | email_logger.critical('Critical Event Notification\n\nTraceback:\n %s', 23 | ''.join(traceback.format_stack())) 24 | except socket.error as error: 25 | logging.critical('Could not send email via SMTPHandler: %r', error) 26 | -------------------------------------------------------------------------------- /tornado-apps/buffered-log-handler.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from logging import handlers 3 | import logging 4 | from tornado import ioloop, web 5 | 6 | MAX_SIZE = 10485760 # 10 MB 7 | 8 | 9 | class BufferedLogHandler(handlers.BufferingHandler): 10 | """The BufferedLogHandler keeps a rolling buffer of log data in 11 | memory. When the buffer size has been exceeded, the oldest log 12 | entries will be removed. 13 | 14 | The max buffer size is passed into the constructor. See the 15 | logging.handlers.BufferingHandler for the full API. 16 | 17 | Access the log data as a list from the BufferedLogHandler.buffer 18 | attribute 19 | 20 | """ 21 | def emit(self, record): 22 | """Append the formatted record to the buffer, removing oldest 23 | entries if the buffer size has passed the limit. 24 | 25 | :param logging.LogRecord record: The new record to log 26 | 27 | """ 28 | self.buffer.append(self.format(record)) 29 | while len(''.join(self.buffer)) >= self.capacity: 30 | self.buffer.remove(0) 31 | 32 | 33 | class WebRequestHandler(web.RequestHandler): 34 | """Tornado request handler that emits the BufferedLogHandler's 35 | buffer content in JSON format when GET was invoked. If flush 36 | is passed as a query value, the buffer will be flushed: 37 | 38 | /?flush=true 39 | 40 | """ 41 | def get(self): 42 | """Return a JSON document of the log entries and flush the 43 | BufferedLogHandler if there is a flush argument in the URL. 44 | 45 | """ 46 | handler = self.application.log_handler 47 | self.write({'log_entries': handler.buffer}) 48 | if self.get_argument('flush', False): 49 | handler.flush() 50 | 51 | 52 | if __name__ == '__main__': 53 | 54 | # Setup logging 55 | logging.basicConfig(level=logging.INFO) 56 | 57 | # Create the web application 58 | routes = [(r'.*', WebRequestHandler)] 59 | application = web.Application(routes) 60 | application.listen(8888) 61 | 62 | # Create the log handler 63 | application.log_handler = BufferedLogHandler(MAX_SIZE) 64 | 65 | # Add the log handler to the root logger 66 | root_logger = logging.getLogger() 67 | root_logger.addHandler(application.log_handler) 68 | 69 | # Start the IOLoop 70 | ioloop.IOLoop.instance().start() 71 | -------------------------------------------------------------------------------- /svgs/fib-svg-no-logger.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | %3 11 | 12 | 13 | 0 14 | 15 | fib:1:<module> 16 | 7.02% 17 | (7.02%) 18 | 4 19 | 20 | 21 | 0->0 22 | 23 | 24 | 3.51% 25 | 2 26 | 27 | 28 | 1 29 | 30 | <string>:1:<module> 31 | 100.00% 32 | (92.98%) 33 | 2 34 | 35 | 36 | 1->0 37 | 38 | 39 | 3.51% 40 | 2 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /svgs/fib-svg-no-logger-p3.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | %3 11 | 12 | 13 | 0 14 | 15 | ~:0:<built-in method exec> 16 | 100.00% 17 | (14.29%) 18 | 1 19 | 20 | 21 | 2 22 | 23 | fib:6:<module> 24 | 85.71% 25 | (42.86%) 26 | 1 27 | 28 | 29 | 0->2 30 | 31 | 32 | 85.71% 33 | 1 34 | 35 | 36 | 3 37 | 38 | fib:6:fib 39 | 42.86% 40 | (42.86%) 41 | 1 42 | 43 | 44 | 2->3 45 | 46 | 47 | 42.86% 48 | 1 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /svgs/fib-svg-logging-p2.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | %3 11 | 12 | 13 | 1 14 | 15 | __init__:24:<module> 16 | 74.12% 17 | (46.20%) 18 | 1 19 | 20 | 21 | 6 22 | 23 | threading:1:<module> 24 | 27.21% 25 | (5.23%) 26 | 1 27 | 28 | 29 | 1->6 30 | 31 | 32 | 27.21% 33 | 1 34 | 35 | 36 | 36 37 | 38 | threading:764:__init__ 39 | 0.64% 40 | (0.06%) 41 | 1 42 | 43 | 44 | 6->36 45 | 46 | 47 | 0.64% 48 | 1 49 | 50 | 51 | 18 52 | 53 | collections:1:<module> 54 | 18.25% 55 | (7.92%) 56 | 1 57 | 58 | 59 | 6->18 60 | 61 | 62 | 18.25% 63 | 1 64 | 65 | 66 | 50 67 | 68 | warnings:45:filterwarnings 69 | 2.70% 70 | (0.09%) 71 | 1 72 | 73 | 74 | 6->50 75 | 76 | 77 | 2.70% 78 | 1 79 | 80 | 81 | 3 82 | 83 | sre_compile:480:_code 84 | 0.97% 85 | (0.04%) 86 | 2 87 | 88 | 89 | 25 90 | 91 | sre_compile:361:_compile_info 92 | 0.61% 93 | (0.29%) 94 | 2 95 | 96 | 97 | 3->25 98 | 99 | 100 | 0.61% 101 | 2 102 | 103 | 104 | 57 105 | 106 | heapq:31:<module> 107 | 10.10% 108 | (7.68%) 109 | 1 110 | 111 | 112 | 18->57 113 | 114 | 115 | 10.10% 116 | 1 117 | 118 | 119 | 28 120 | 121 | re:188:compile 122 | 2.59% 123 | (0.04%) 124 | 2 125 | 126 | 127 | 50->28 128 | 129 | 130 | 2.59% 131 | 2 132 | 133 | 134 | 8 135 | 136 | fib:1:<module> 137 | 99.99% 138 | (25.82%) 139 | 1 140 | 141 | 142 | 8->1 143 | 144 | 145 | 74.12% 146 | 1 147 | 148 | 149 | 14 150 | 151 | sre_parse:663:parse 152 | 1.22% 153 | (0.07%) 154 | 2 155 | 156 | 157 | 29 158 | 159 | sre_parse:301:_parse_sub 160 | 1.02% 161 | (0.07%) 162 | 2 163 | 164 | 165 | 14->29 166 | 167 | 168 | 1.02% 169 | 2 170 | 171 | 172 | 15 173 | 174 | sre_parse:379:_parse 175 | 0.94% 176 | (0.39%) 177 | 2 178 | 179 | 180 | 29->15 181 | 182 | 183 | 0.94% 184 | 2 185 | 186 | 187 | 70 188 | 189 | bisect:1:<module> 190 | 2.41% 191 | (2.41%) 192 | 1 193 | 194 | 195 | 57->70 196 | 197 | 198 | 2.41% 199 | 1 200 | 201 | 202 | 27 203 | 204 | re:228:_compile 205 | 2.55% 206 | (0.15%) 207 | 2 208 | 209 | 210 | 39 211 | 212 | sre_compile:495:compile 213 | 2.36% 214 | (0.12%) 215 | 2 216 | 217 | 218 | 27->39 219 | 220 | 221 | 2.36% 222 | 2 223 | 224 | 225 | 39->3 226 | 227 | 228 | 0.97% 229 | 2 230 | 231 | 232 | 39->14 233 | 234 | 235 | 1.22% 236 | 2 237 | 238 | 239 | 28->27 240 | 241 | 242 | 2.55% 243 | 2 244 | 245 | 246 | 247 | -------------------------------------------------------------------------------- /svgs/fib-svg-logger-p2.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | %3 11 | 12 | 13 | 1 14 | 15 | __init__:24:<module> 16 | 89.53% 17 | (43.41%) 18 | 1 19 | 20 | 21 | 6 22 | 23 | threading:1:<module> 24 | 44.93% 25 | (8.76%) 26 | 1 27 | 28 | 29 | 1->6 30 | 31 | 32 | 44.93% 33 | 1 34 | 35 | 36 | 65 37 | 38 | warnings:45:filterwarnings 39 | 4.45% 40 | (0.09%) 41 | 1 42 | 43 | 44 | 6->65 45 | 46 | 47 | 4.45% 48 | 1 49 | 50 | 51 | 19 52 | 53 | collections:1:<module> 54 | 30.07% 55 | (13.12%) 56 | 1 57 | 58 | 59 | 6->19 60 | 61 | 62 | 30.07% 63 | 1 64 | 65 | 66 | 69 67 | 68 | threading:764:__init__ 69 | 1.07% 70 | (0.15%) 71 | 1 72 | 73 | 74 | 6->69 75 | 76 | 77 | 1.07% 78 | 1 79 | 80 | 81 | 2 82 | 83 | sre_compile:32:_compile 84 | 0.51% 85 | (0.33%) 86 | 2 87 | 88 | 89 | 3 90 | 91 | sre_compile:480:_code 92 | 1.62% 93 | (0.07%) 94 | 2 95 | 96 | 97 | 3->2 98 | 99 | 100 | 0.51% 101 | 2 102 | 103 | 104 | 30 105 | 106 | sre_compile:361:_compile_info 107 | 1.03% 108 | (0.57%) 109 | 2 110 | 111 | 112 | 3->30 113 | 114 | 115 | 1.03% 116 | 2 117 | 118 | 119 | 33 120 | 121 | re:188:compile 122 | 4.26% 123 | (0.07%) 124 | 2 125 | 126 | 127 | 65->33 128 | 129 | 130 | 4.26% 131 | 2 132 | 133 | 134 | 73 135 | 136 | heapq:31:<module> 137 | 16.57% 138 | (12.64%) 139 | 1 140 | 141 | 142 | 19->73 143 | 144 | 145 | 16.57% 146 | 1 147 | 148 | 149 | 26 150 | 151 | threading:436:__init__ 152 | 0.68% 153 | (0.13%) 154 | 1 155 | 156 | 157 | 69->26 158 | 159 | 160 | 0.68% 161 | 1 162 | 163 | 164 | 7 165 | 166 | fib:6:fib 167 | 1.03% 168 | (0.33%) 169 | 1 170 | 171 | 172 | 21 173 | 174 | __init__:1110:debug 175 | 0.70% 176 | (0.17%) 177 | 31 178 | 179 | 180 | 7->21 181 | 182 | 183 | 0.70% 184 | 31 185 | 186 | 187 | 20 188 | 189 | __init__:1324:isEnabledFor 190 | 0.53% 191 | (0.24%) 192 | 31 193 | 194 | 195 | 21->20 196 | 197 | 198 | 0.53% 199 | 31 200 | 201 | 202 | 8 203 | 204 | fib:1:<module> 205 | 100.00% 206 | (8.14%) 207 | 1 208 | 209 | 210 | 8->1 211 | 212 | 213 | 89.53% 214 | 1 215 | 216 | 217 | 10 218 | 219 | __init__:1471:basicConfig 220 | 0.97% 221 | (0.13%) 222 | 1 223 | 224 | 225 | 8->10 226 | 227 | 228 | 0.97% 229 | 1 230 | 231 | 232 | 8->7 233 | 234 | 235 | 1.03% 236 | 1 237 | 238 | 239 | 17 240 | 241 | sre_parse:379:_parse 242 | 1.52% 243 | (0.53%) 244 | 2 245 | 246 | 247 | 75 248 | 249 | sre_parse:201:get 250 | 0.73% 251 | (0.22%) 252 | 26 253 | 254 | 255 | 17->75 256 | 257 | 258 | 0.70% 259 | 24 260 | 261 | 262 | 74 263 | 264 | sre_parse:182:__next 265 | 0.61% 266 | (0.46%) 267 | 28 268 | 269 | 270 | 75->74 271 | 272 | 273 | 0.51% 274 | 26 275 | 276 | 277 | 88 278 | 279 | bisect:1:<module> 280 | 3.93% 281 | (3.93%) 282 | 1 283 | 284 | 285 | 73->88 286 | 287 | 288 | 3.93% 289 | 1 290 | 291 | 292 | 32 293 | 294 | re:228:_compile 295 | 4.19% 296 | (0.26%) 297 | 2 298 | 299 | 300 | 53 301 | 302 | sre_compile:495:compile 303 | 3.89% 304 | (0.20%) 305 | 2 306 | 307 | 308 | 32->53 309 | 310 | 311 | 3.89% 312 | 2 313 | 314 | 315 | 53->3 316 | 317 | 318 | 1.62% 319 | 2 320 | 321 | 322 | 35 323 | 324 | sre_parse:663:parse 325 | 2.00% 326 | (0.20%) 327 | 2 328 | 329 | 330 | 53->35 331 | 332 | 333 | 2.00% 334 | 2 335 | 336 | 337 | 33->32 338 | 339 | 340 | 4.19% 341 | 2 342 | 343 | 344 | 34 345 | 346 | sre_parse:301:_parse_sub 347 | 1.63% 348 | (0.09%) 349 | 2 350 | 351 | 352 | 34->17 353 | 354 | 355 | 1.52% 356 | 2 357 | 358 | 359 | 35->34 360 | 361 | 362 | 1.63% 363 | 2 364 | 365 | 366 | 367 | -------------------------------------------------------------------------------- /svgs/fib-svg-logger-debug-p2.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | %3 11 | 12 | 13 | 1 14 | 15 | __init__:242:__init__ 16 | 7.73% 17 | (4.16%) 18 | 31 19 | 20 | 21 | 136 22 | 23 | ~:0:<isinstance> 24 | 0.52% 25 | (0.52%) 26 | 107 27 | 28 | 29 | 1->136 30 | 31 | 32 | 0.22% 33 | 31 34 | 35 | 36 | 47 37 | 38 | __init__:153:getLevelName 39 | 0.58% 40 | (0.50%) 41 | 31 42 | 43 | 44 | 1->47 45 | 46 | 47 | 0.58% 48 | 31 49 | 50 | 51 | 17 52 | 53 | posixpath:110:basename 54 | 0.56% 55 | (0.36%) 56 | 31 57 | 58 | 59 | 1->17 60 | 61 | 62 | 0.56% 63 | 31 64 | 65 | 66 | 86 67 | 68 | posixpath:95:splitext 69 | 1.23% 70 | (0.42%) 71 | 31 72 | 73 | 74 | 1->86 75 | 76 | 77 | 1.23% 78 | 31 79 | 80 | 81 | 21 82 | 83 | genericpath:85:_splitext 84 | 0.81% 85 | (0.62%) 86 | 31 87 | 88 | 89 | 86->21 90 | 91 | 92 | 0.81% 93 | 31 94 | 95 | 96 | 2 97 | 98 | __init__:24:<module> 99 | 67.78% 100 | (30.83%) 101 | 1 102 | 103 | 104 | 7 105 | 106 | threading:1:<module> 107 | 35.97% 108 | (6.94%) 109 | 1 110 | 111 | 112 | 2->7 113 | 114 | 115 | 35.97% 116 | 1 117 | 118 | 119 | 83 120 | 121 | threading:764:__init__ 122 | 0.92% 123 | (0.08%) 124 | 1 125 | 126 | 127 | 7->83 128 | 129 | 130 | 0.92% 131 | 1 132 | 133 | 134 | 79 135 | 136 | warnings:45:filterwarnings 137 | 3.84% 138 | (0.11%) 139 | 1 140 | 141 | 142 | 7->79 143 | 144 | 145 | 3.84% 146 | 1 147 | 148 | 149 | 26 150 | 151 | collections:1:<module> 152 | 23.73% 153 | (10.20%) 154 | 1 155 | 156 | 157 | 7->26 158 | 159 | 160 | 23.73% 161 | 1 162 | 163 | 164 | 4 165 | 166 | sre_compile:480:_code 167 | 1.42% 168 | (0.08%) 169 | 2 170 | 171 | 172 | 37 173 | 174 | sre_compile:361:_compile_info 175 | 0.91% 176 | (0.42%) 177 | 2 178 | 179 | 180 | 4->37 181 | 182 | 183 | 0.91% 184 | 2 185 | 186 | 187 | 33 188 | 189 | threading:436:__init__ 190 | 0.59% 191 | (0.16%) 192 | 1 193 | 194 | 195 | 83->33 196 | 197 | 198 | 0.59% 199 | 1 200 | 201 | 202 | 43 203 | 204 | re:188:compile 205 | 3.67% 206 | (0.05%) 207 | 2 208 | 209 | 210 | 79->43 211 | 212 | 213 | 3.67% 214 | 2 215 | 216 | 217 | 90 218 | 219 | heapq:31:<module> 220 | 13.22% 221 | (10.09%) 222 | 1 223 | 224 | 225 | 26->90 226 | 227 | 228 | 13.22% 229 | 1 230 | 231 | 232 | 9 233 | 234 | __init__:1471:basicConfig 235 | 0.81% 236 | (0.17%) 237 | 1 238 | 239 | 240 | 10 241 | 242 | __init__:1284:callHandlers 243 | 11.34% 244 | (0.81%) 245 | 31 246 | 247 | 248 | 51 249 | 250 | __init__:731:handle 251 | 10.53% 252 | (0.73%) 253 | 31 254 | 255 | 256 | 10->51 257 | 258 | 259 | 10.53% 260 | 31 261 | 262 | 263 | 16 264 | 265 | __init__:830:emit 266 | 6.56% 267 | (1.30%) 268 | 31 269 | 270 | 271 | 51->16 272 | 273 | 274 | 6.56% 275 | 31 276 | 277 | 278 | 76 279 | 280 | __init__:688:acquire 281 | 1.58% 282 | (0.33%) 283 | 31 284 | 285 | 286 | 51->76 287 | 288 | 289 | 1.58% 290 | 31 291 | 292 | 293 | 102 294 | 295 | __init__:695:release 296 | 1.52% 297 | (0.27%) 298 | 31 299 | 300 | 301 | 51->102 302 | 303 | 304 | 1.52% 305 | 31 306 | 307 | 308 | 11 309 | 310 | __init__:1252:handle 311 | 11.97% 312 | (0.36%) 313 | 31 314 | 315 | 316 | 11->10 317 | 318 | 319 | 11.34% 320 | 31 321 | 322 | 323 | 12 324 | 325 | __init__:311:getMessage 326 | 1.28% 327 | (1.16%) 328 | 31 329 | 330 | 331 | 12->136 332 | 333 | 334 | 0.12% 335 | 31 336 | 337 | 338 | 13 339 | 340 | __init__:451:format 341 | 2.86% 342 | (0.97%) 343 | 31 344 | 345 | 346 | 108 347 | 348 | __init__:445:usesTime 349 | 0.61% 350 | (0.37%) 351 | 31 352 | 353 | 354 | 13->108 355 | 356 | 357 | 0.61% 358 | 31 359 | 360 | 361 | 13->12 362 | 363 | 364 | 1.28% 365 | 31 366 | 367 | 368 | 15 369 | 370 | __init__:708:format 371 | 3.12% 372 | (0.27%) 373 | 31 374 | 375 | 376 | 15->13 377 | 378 | 379 | 2.86% 380 | 31 381 | 382 | 383 | 16->136 384 | 385 | 386 | 0.12% 387 | 31 388 | 389 | 390 | 138 391 | 392 | ~:0:<method 'write' of 'file' objects> 393 | 1.37% 394 | (1.37%) 395 | 31 396 | 397 | 398 | 16->138 399 | 400 | 401 | 1.37% 402 | 31 403 | 404 | 405 | 84 406 | 407 | __init__:823:flush 408 | 0.64% 409 | (0.42%) 410 | 31 411 | 412 | 413 | 16->84 414 | 415 | 416 | 0.64% 417 | 31 418 | 419 | 420 | 16->15 421 | 422 | 423 | 3.12% 424 | 31 425 | 426 | 427 | 24 428 | 429 | sre_parse:379:_parse 430 | 1.33% 431 | (0.47%) 432 | 2 433 | 434 | 435 | 92 436 | 437 | sre_parse:201:get 438 | 0.59% 439 | (0.22%) 440 | 26 441 | 442 | 443 | 24->92 444 | 445 | 446 | 0.56% 447 | 24 448 | 449 | 450 | 109 451 | 452 | bisect:1:<module> 453 | 3.12% 454 | (3.12%) 455 | 1 456 | 457 | 458 | 90->109 459 | 460 | 461 | 3.12% 462 | 1 463 | 464 | 465 | 27 466 | 467 | __init__:1324:isEnabledFor 468 | 0.53% 469 | (0.27%) 470 | 31 471 | 472 | 473 | 28 474 | 475 | __init__:1110:debug 476 | 24.17% 477 | (0.97%) 478 | 31 479 | 480 | 481 | 28->27 482 | 483 | 484 | 0.53% 485 | 31 486 | 487 | 488 | 69 489 | 490 | __init__:1231:_log 491 | 22.67% 492 | (0.84%) 493 | 31 494 | 495 | 496 | 28->69 497 | 498 | 499 | 22.67% 500 | 31 501 | 502 | 503 | 41 504 | 505 | __init__:1218:makeRecord 506 | 8.30% 507 | (0.56%) 508 | 31 509 | 510 | 511 | 69->41 512 | 513 | 514 | 8.30% 515 | 31 516 | 517 | 518 | 50 519 | 520 | __init__:1197:findCaller 521 | 1.56% 522 | (0.98%) 523 | 31 524 | 525 | 526 | 69->50 527 | 528 | 529 | 1.56% 530 | 31 531 | 532 | 533 | 69->11 534 | 535 | 536 | 11.97% 537 | 31 538 | 539 | 540 | 41->1 541 | 542 | 543 | 7.73% 544 | 31 545 | 546 | 547 | 42 548 | 549 | re:228:_compile 550 | 3.62% 551 | (0.22%) 552 | 2 553 | 554 | 555 | 65 556 | 557 | sre_compile:495:compile 558 | 3.36% 559 | (0.12%) 560 | 2 561 | 562 | 563 | 42->65 564 | 565 | 566 | 3.36% 567 | 2 568 | 569 | 570 | 64 571 | 572 | sre_parse:663:parse 573 | 1.72% 574 | (0.14%) 575 | 2 576 | 577 | 578 | 65->64 579 | 580 | 581 | 1.72% 582 | 2 583 | 584 | 585 | 65->4 586 | 587 | 588 | 1.42% 589 | 2 590 | 591 | 592 | 43->42 593 | 594 | 595 | 3.62% 596 | 2 597 | 598 | 599 | 125 600 | 601 | threading:121:acquire 602 | 1.44% 603 | (0.87%) 604 | 35 605 | 606 | 607 | 76->125 608 | 609 | 610 | 1.25% 611 | 31 612 | 613 | 614 | 122 615 | 616 | threading:141:release 617 | 1.39% 618 | (0.97%) 619 | 35 620 | 621 | 622 | 102->122 623 | 624 | 625 | 1.25% 626 | 31 627 | 628 | 629 | 95 630 | 631 | sre_parse:301:_parse_sub 632 | 1.42% 633 | (0.09%) 634 | 2 635 | 636 | 637 | 64->95 638 | 639 | 640 | 1.42% 641 | 2 642 | 643 | 644 | 95->24 645 | 646 | 647 | 1.33% 648 | 2 649 | 650 | 651 | 85 652 | 653 | fib:1:<module> 654 | 100.00% 655 | (6.55%) 656 | 1 657 | 658 | 659 | 85->9 660 | 661 | 662 | 0.81% 663 | 1 664 | 665 | 666 | 85->2 667 | 668 | 669 | 67.78% 670 | 1 671 | 672 | 673 | 113 674 | 675 | fib:9:fib 676 | 24.53% 677 | (0.36%) 678 | 1 679 | 680 | 681 | 85->113 682 | 683 | 684 | 24.53% 685 | 1 686 | 687 | 688 | 113->28 689 | 690 | 691 | 24.17% 692 | 31 693 | 694 | 695 | 696 | --------------------------------------------------------------------------------