|
6 | 6 | import sublime
|
7 | 7 | import sublime_plugin
|
8 | 8 |
|
9 |
| -packages_path = sublime.packages_path() |
10 |
| -root_path = os.path.dirname(packages_path) |
11 |
| -log_file = os.path.join(root_path, "Log", "pyvoice.log") |
| 9 | +DEFAULT_LOG_LEVEL = logging.INFO |
| 10 | +DEFAULT_LOG_LEVEL_NAME = logging.getLevelName(DEFAULT_LOG_LEVEL) |
| 11 | +EVENT_LEVEL = logging.INFO |
12 | 12 |
|
13 |
| -package_logger = logging.getLogger(__package__) |
14 | 13 |
|
15 |
| -formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") |
| 14 | +formatter = logging.Formatter( |
| 15 | + "%(name)s (sublime): %(levelname)s: %(message)s - %(asctime)s" |
| 16 | +) |
16 | 17 | stream_handler = logging.StreamHandler()
|
17 | 18 | stream_handler.setFormatter(formatter)
|
18 |
| -stream_handler.setLevel(logging.INFO) |
| 19 | +stream_handler.setLevel(logging.NOTSET) |
| 20 | + |
| 21 | +package_logger = logging.getLogger(__package__) |
19 | 22 | package_logger.addHandler(stream_handler)
|
20 | 23 |
|
21 |
| -debug_formatter = logging.Formatter( |
22 |
| - "%(asctime)s - %(name)24s - %(threadName)12s - %(thread)5d - %(levelname)8s - %(message)s" |
23 |
| -) |
24 |
| -file_handler = logging.handlers.RotatingFileHandler( |
25 |
| - log_file, maxBytes=1024 * 1024, backupCount=5 |
26 |
| -) |
27 |
| -file_handler.setFormatter(debug_formatter) |
28 |
| -file_handler.setLevel(logging.DEBUG) |
29 |
| -package_logger.addHandler(file_handler) |
30 | 24 |
|
31 |
| -package_logger.setLevel(logging.DEBUG) |
32 |
| -package_logger.propagate = False |
| 25 | +logger = logging.getLogger(__name__) |
| 26 | + |
| 27 | + |
| 28 | +def translate_to_log_level(level_name): |
| 29 | + level_name = level_name.upper() |
| 30 | + return { |
| 31 | + "CRITICAL": logging.CRITICAL, |
| 32 | + "ERROR": logging.ERROR, |
| 33 | + "WARNING": logging.WARNING, |
| 34 | + "INFO": logging.INFO, |
| 35 | + "DEBUG": logging.DEBUG, |
| 36 | + }[level_name] |
| 37 | + |
| 38 | + |
| 39 | +def _settings(): |
| 40 | + return sublime.load_settings("LSP-pyvoice.sublime-settings") |
| 41 | + |
| 42 | + |
| 43 | +def plugin_loaded(): |
| 44 | + def on_settings_reload(): |
| 45 | + cur_log_level = package_logger.getEffectiveLevel() |
| 46 | + new_log_level_name = ( |
| 47 | + _settings().get("log_level", DEFAULT_LOG_LEVEL_NAME).upper() |
| 48 | + ) |
| 49 | + new_log_level = translate_to_log_level(new_log_level_name) |
| 50 | + |
| 51 | + if new_log_level != cur_log_level: |
| 52 | + if cur_log_level > EVENT_LEVEL and new_log_level <= EVENT_LEVEL: |
| 53 | + # Only set level before emitting log event if it would not be seen otherwise |
| 54 | + package_logger.setLevel(new_log_level) |
| 55 | + cur_log_level_name = logging.getLevelName(cur_log_level) |
| 56 | + logger.log( |
| 57 | + EVENT_LEVEL, |
| 58 | + "Changing log level from %r to %r", |
| 59 | + cur_log_level_name, |
| 60 | + new_log_level_name, |
| 61 | + ) |
| 62 | + package_logger.setLevel(new_log_level) # Just set it again to be sure |
| 63 | + |
| 64 | + _settings().add_on_change(__name__, on_settings_reload) |
| 65 | + on_settings_reload() # trigger on inital settings load, too |
| 66 | + |
| 67 | + |
| 68 | +def plugin_unloaded(): |
| 69 | + _settings().clear_on_change(__name__) |
| 70 | + package_logger.removeHandler(stream_handler) |
0 commit comments