##// END OF EJS Templates
application: add debug mode that switches logging to debug....
marcink -
r3270:312a83d9 default
parent child Browse files
Show More
@@ -1,10 +1,11 b''
1 1
2 2
3 3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 5 ################################################################################
6 6
7 7 [DEFAULT]
8 ## Debug flag sets all loggers to debug, and enables request tracking
8 9 debug = true
9 10
10 11 ################################################################################
@@ -414,6 +415,7 b' search.location = %(here)s/data/index'
414 415 ########################################
415 416 ## channelstream enables persistent connections and live notification
416 417 ## in the system. It's also used by the chat system
418
417 419 channelstream.enabled = false
418 420
419 421 ## server address for channelstream server on the backend
@@ -490,14 +492,6 b' appenlight.request_keys_blacklist ='
490 492 ## (by default the client ignores own entries: appenlight_client.client)
491 493 appenlight.log_namespace_blacklist =
492 494
493
494 ################################################################################
495 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
496 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
497 ## execute malicious code after an exception is raised. ##
498 ################################################################################
499 #set debug = false
500
501 495 # enable debug style page
502 496 debug_style = true
503 497
@@ -1,11 +1,12 b''
1 1
2 2
3 3 ################################################################################
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 5 ################################################################################
6 6
7 7 [DEFAULT]
8 debug = true
8 ## Debug flag sets all loggers to debug, and enables request tracking
9 debug = false
9 10
10 11 ################################################################################
11 12 ## EMAIL CONFIGURATION ##
@@ -389,6 +390,7 b' search.location = %(here)s/data/index'
389 390 ########################################
390 391 ## channelstream enables persistent connections and live notification
391 392 ## in the system. It's also used by the chat system
393
392 394 channelstream.enabled = false
393 395
394 396 ## server address for channelstream server on the backend
@@ -466,14 +468,6 b' appenlight.request_keys_blacklist ='
466 468 appenlight.log_namespace_blacklist =
467 469
468 470
469 ################################################################################
470 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
471 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
472 ## execute malicious code after an exception is raised. ##
473 ################################################################################
474 set debug = false
475
476
477 471 ###########################################
478 472 ### MAIN RHODECODE DATABASE CONFIG ###
479 473 ###########################################
@@ -524,6 +518,7 b' vcs.scm_app_implementation = http'
524 518 ## Push/Pull operations hooks protocol, available options are:
525 519 ## `http` - use http-rpc backend (default)
526 520 vcs.hooks.protocol = http
521
527 522 ## Host on which this instance is listening for hooks. If vcsserver is in other location
528 523 ## this should be adjusted.
529 524 vcs.hooks.host = 127.0.0.1
@@ -3,6 +3,16 b''
3 3 Enabling Debug Mode
4 4 -------------------
5 5
6 Debug Mode will enable debug logging, and request tracking middleware. Debug Mode
7 enabled DEBUG log-level which allows tracking various information about authentication
8 failures, LDAP connection, email etc.
9
10 The request tracking will add a special
11 unique ID: `| req_id:00000000-0000-0000-0000-000000000000` at the end of each log line.
12 The req_id is the same for each individual requests, it means that if you want to
13 track particular user logs only, and exclude other concurrent ones
14 simply grep by `req_id` uuid which you'll have to find for the individual request.
15
6 16 To enable debug mode on a |RCE| instance you need to set the debug property
7 17 in the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. To
8 18 do this, use the following steps
@@ -11,14 +21,10 b' 1. Open the file and set the ``debug`` l'
11 21 2. Restart you instance using the ``rccontrol restart`` command,
12 22 see the following example:
13 23
14 You can also set the log level, the follow are the valid options;
15 ``debug``, ``info``, ``warning``, or ``fatal``.
16
17 24 .. code-block:: ini
18 25
19 26 [DEFAULT]
20 27 debug = true
21 pdebug = false
22 28
23 29 .. code-block:: bash
24 30
@@ -27,6 +33,7 b' You can also set the log level, the foll'
27 33 Instance "enterprise-1" successfully stopped.
28 34 Instance "enterprise-1" successfully started.
29 35
36
30 37 Debug and Logging Configuration
31 38 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
32 39
@@ -47,7 +54,7 b' the ``debug`` level.'
47 54 ### LOGGING CONFIGURATION ####
48 55 ################################
49 56 [loggers]
50 keys = root, sqlalchemy, rhodecode, ssh_wrapper
57 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
51 58
52 59 [handlers]
53 60 keys = console, console_sql, file, file_rotating
@@ -62,11 +69,16 b' the ``debug`` level.'
62 69 level = NOTSET
63 70 handlers = console
64 71
65 [logger_routes]
72 [logger_sqlalchemy]
73 level = INFO
74 handlers = console_sql
75 qualname = sqlalchemy.engine
76 propagate = 0
77
78 [logger_beaker]
66 79 level = DEBUG
67 80 handlers =
68 qualname = routes.middleware
69 ## "level = DEBUG" logs the route matched and routing variables.
81 qualname = beaker.container
70 82 propagate = 1
71 83
72 84 [logger_rhodecode]
@@ -75,11 +87,16 b' the ``debug`` level.'
75 87 qualname = rhodecode
76 88 propagate = 1
77 89
78 [logger_sqlalchemy]
79 level = INFO
80 handlers = console_sql
81 qualname = sqlalchemy.engine
82 propagate = 0
90 [logger_ssh_wrapper]
91 level = DEBUG
92 handlers =
93 qualname = ssh_wrapper
94 propagate = 1
95
96 [logger_celery]
97 level = DEBUG
98 handlers =
99 qualname = celery
83 100
84 101 ##############
85 102 ## HANDLERS ##
@@ -87,19 +104,19 b' the ``debug`` level.'
87 104
88 105 [handler_console]
89 106 class = StreamHandler
90 args = (sys.stderr,)
91 level = INFO
107 args = (sys.stderr, )
108 level = DEBUG
92 109 formatter = generic
93 110
94 111 [handler_console_sql]
95 112 class = StreamHandler
96 args = (sys.stderr,)
97 level = WARN
113 args = (sys.stderr, )
114 level = INFO
98 115 formatter = generic
99 116
100 117 [handler_file]
101 118 class = FileHandler
102 args = ('rhodecode.log', 'a',)
119 args = ('rhodecode_debug.log', 'a',)
103 120 level = INFO
104 121 formatter = generic
105 122
@@ -107,6 +124,25 b' the ``debug`` level.'
107 124 class = logging.handlers.TimedRotatingFileHandler
108 125 # 'D', 5 - rotate every 5days
109 126 # you can set 'h', 'midnight'
110 args = ('rhodecode.log', 'D', 5, 10,)
127 args = ('rhodecode_debug_rotated.log', 'D', 5, 10,)
111 128 level = INFO
112 129 formatter = generic
130
131 ################
132 ## FORMATTERS ##
133 ################
134
135 [formatter_generic]
136 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
137 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
138 datefmt = %Y-%m-%d %H:%M:%S
139
140 [formatter_color_formatter]
141 class = rhodecode.lib.logging_formatter.ColorFormatter
142 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
143 datefmt = %Y-%m-%d %H:%M:%S
144
145 [formatter_color_formatter_sql]
146 class = rhodecode.lib.logging_formatter.ColorFormatterSql
147 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
148 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -89,6 +89,10 b' def make_pyramid_app(global_config, **se'
89 89 # will be replaced by the value of the environment variable "NAME" in this case.
90 90 start_time = time.time()
91 91
92 debug = asbool(global_config.get('debug'))
93 if debug:
94 enable_debug()
95
92 96 environ = {'ENV_{}'.format(key): value for key, value in os.environ.items()}
93 97
94 98 global_config = _substitute_values(global_config, environ)
@@ -118,6 +122,7 b' def make_pyramid_app(global_config, **se'
118 122 total_time = time.time() - start_time
119 123 log.info('Pyramid app `%s` created and configured in %.2fs',
120 124 pyramid_app.func_name, total_time)
125
121 126 return pyramid_app
122 127
123 128
@@ -432,6 +437,114 b' def sanitize_settings_and_apply_defaults'
432 437 return settings
433 438
434 439
440 def enable_debug():
441 """
442 Helper to enable debug on running instance
443 :return:
444 """
445 import tempfile
446 import textwrap
447 import logging.config
448
449 ini_template = textwrap.dedent("""
450 #####################################
451 ### DEBUG LOGGING CONFIGURATION ####
452 #####################################
453 [loggers]
454 keys = root, sqlalchemy, beaker, celery, rhodecode, ssh_wrapper
455
456 [handlers]
457 keys = console, console_sql
458
459 [formatters]
460 keys = generic, color_formatter, color_formatter_sql
461
462 #############
463 ## LOGGERS ##
464 #############
465 [logger_root]
466 level = NOTSET
467 handlers = console
468
469 [logger_sqlalchemy]
470 level = INFO
471 handlers = console_sql
472 qualname = sqlalchemy.engine
473 propagate = 0
474
475 [logger_beaker]
476 level = DEBUG
477 handlers =
478 qualname = beaker.container
479 propagate = 1
480
481 [logger_rhodecode]
482 level = DEBUG
483 handlers =
484 qualname = rhodecode
485 propagate = 1
486
487 [logger_ssh_wrapper]
488 level = DEBUG
489 handlers =
490 qualname = ssh_wrapper
491 propagate = 1
492
493 [logger_celery]
494 level = DEBUG
495 handlers =
496 qualname = celery
497
498
499 ##############
500 ## HANDLERS ##
501 ##############
502
503 [handler_console]
504 class = StreamHandler
505 args = (sys.stderr, )
506 level = DEBUG
507 formatter = color_formatter
508
509 [handler_console_sql]
510 # "level = DEBUG" logs SQL queries and results.
511 # "level = INFO" logs SQL queries.
512 # "level = WARN" logs neither. (Recommended for production systems.)
513 class = StreamHandler
514 args = (sys.stderr, )
515 level = WARN
516 formatter = color_formatter_sql
517
518 ################
519 ## FORMATTERS ##
520 ################
521
522 [formatter_generic]
523 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
524 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | %(req_id)s
525 datefmt = %Y-%m-%d %H:%M:%S
526
527 [formatter_color_formatter]
528 class = rhodecode.lib.logging_formatter.ColorRequestTrackingFormatter
529 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s | %(req_id)s
530 datefmt = %Y-%m-%d %H:%M:%S
531
532 [formatter_color_formatter_sql]
533 class = rhodecode.lib.logging_formatter.ColorFormatterSql
534 format = %(asctime)s.%(msecs)03d [%(process)d] %(levelname)-5.5s [%(name)s] %(message)s
535 datefmt = %Y-%m-%d %H:%M:%S
536 """)
537
538 with tempfile.NamedTemporaryFile(prefix='rc_debug_logging_', suffix='.ini',
539 delete=False) as f:
540 log.info('Saved Temporary DEBUG config at %s', f.name)
541 f.write(ini_template)
542
543 logging.config.fileConfig(f.name)
544 log.debug('DEBUG MODE ON')
545 os.remove(f.name)
546
547
435 548 def _sanitize_appenlight_settings(settings):
436 549 _bool_setting(settings, 'appenlight', 'false')
437 550
@@ -14,7 +14,6 b' function registerRCRoutes() {'
14 14 // routes registration
15 15 pyroutes.register('favicon', '/favicon.ico', []);
16 16 pyroutes.register('robots', '/robots.txt', []);
17 pyroutes.register('auth_home', '/_admin/auth*traverse', []);
18 17 pyroutes.register('global_integrations_new', '/_admin/integrations/new', []);
19 18 pyroutes.register('global_integrations_home', '/_admin/integrations', []);
20 19 pyroutes.register('global_integrations_list', '/_admin/integrations/%(integration)s', ['integration']);
@@ -30,6 +29,7 b' function registerRCRoutes() {'
30 29 pyroutes.register('repo_integrations_list', '/%(repo_name)s/settings/integrations/%(integration)s', ['repo_name', 'integration']);
31 30 pyroutes.register('repo_integrations_create', '/%(repo_name)s/settings/integrations/%(integration)s/new', ['repo_name', 'integration']);
32 31 pyroutes.register('repo_integrations_edit', '/%(repo_name)s/settings/integrations/%(integration)s/%(integration_id)s', ['repo_name', 'integration', 'integration_id']);
32 pyroutes.register('auth_home', '/_admin/auth*traverse', []);
33 33 pyroutes.register('ops_ping', '/_admin/ops/ping', []);
34 34 pyroutes.register('ops_error_test', '/_admin/ops/error', []);
35 35 pyroutes.register('ops_redirect_test', '/_admin/ops/redirect', []);
General Comments 0
You need to be logged in to leave comments. Login now