|
21 | 21 | # Local imports |
22 | 22 | from spyder.config.base import DEV, get_conf_path, get_debug_level |
23 | 23 | from spyder.utils.qthelpers import file_uri |
| 24 | +from spyder.utils.external.dafsa.dafsa import DAFSA |
24 | 25 |
|
25 | 26 | # For spyder-ide/spyder#7447. |
26 | 27 | try: |
|
29 | 30 | QQuickWindow = QSGRendererInterface = None |
30 | 31 |
|
31 | 32 |
|
| 33 | +root_logger = logging.getLogger() |
| 34 | +FILTER_NAMES = os.environ.get('SPYDER_FILTER_LOG', "").split(',') |
| 35 | +FILTER_NAMES = [f.strip() for f in FILTER_NAMES] |
| 36 | + |
| 37 | + |
32 | 38 | def get_python_doc_path(): |
33 | 39 | """ |
34 | 40 | Return Python documentation path |
@@ -77,15 +83,39 @@ def setup_logging(cli_options): |
77 | 83 | log_level = levels[get_debug_level()] |
78 | 84 | log_format = '%(asctime)s [%(levelname)s] [%(name)s] -> %(message)s' |
79 | 85 |
|
| 86 | + console_filters = cli_options.filter_log.split(',') |
| 87 | + console_filters = [x.strip() for x in console_filters] |
| 88 | + console_filters = console_filters + FILTER_NAMES |
| 89 | + console_filters = [x for x in console_filters if x != ''] |
| 90 | + |
| 91 | + handlers = [logging.StreamHandler()] |
80 | 92 | if cli_options.debug_output == 'file': |
81 | 93 | log_file = 'spyder-debug.log' |
| 94 | + handlers.append(logging.FileHandler(open(log_file, 'w+'))) |
82 | 95 | else: |
83 | 96 | log_file = None |
84 | 97 |
|
85 | | - logging.basicConfig(level=log_level, |
86 | | - format=log_format, |
87 | | - filename=log_file, |
88 | | - filemode='w+') |
| 98 | + match_func = lambda x: True |
| 99 | + if console_filters != [''] and len(console_filters) > 0: |
| 100 | + dafsa = DAFSA(console_filters) |
| 101 | + match_func = lambda x: (dafsa.lookup(x, stop_on_prefix=True) |
| 102 | + is not None) |
| 103 | + |
| 104 | + formatter = logging.Formatter(log_format) |
| 105 | + |
| 106 | + class ModuleFilter(logging.Filter): |
| 107 | + """Filter messages based on module name prefix.""" |
| 108 | + |
| 109 | + def filter(self, record): |
| 110 | + return match_func(record.name) |
| 111 | + |
| 112 | + filter = ModuleFilter() |
| 113 | + root_logger.setLevel(log_level) |
| 114 | + for handler in handlers: |
| 115 | + handler.addFilter(filter) |
| 116 | + handler.setFormatter(formatter) |
| 117 | + handler.setLevel(log_level) |
| 118 | + root_logger.addHandler(handler) |
89 | 119 |
|
90 | 120 |
|
91 | 121 | def delete_lsp_log_files(): |
|
0 commit comments