Skip to content

Commit 0e03b1d

Browse files
committed
create configuration for logging to console
in the future it might make sense to create a logger that has a dedicated output panel it was also the idea of also keeping persistent logs to file but probably not necessary for the time being
1 parent ac28831 commit 0e03b1d

File tree

2 files changed

+56
-17
lines changed

2 files changed

+56
-17
lines changed

LSP-pyvoice.sublime-settings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"venvPath":".venv"
99
},
1010
"selector": "source.python",
11+
"log_level":"WARNING",
1112
// ST3
1213
"languages": [
1314
{

configure_logging.py

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,65 @@
66
import sublime
77
import sublime_plugin
88

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
1212

13-
package_logger = logging.getLogger(__package__)
1413

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+
)
1617
stream_handler = logging.StreamHandler()
1718
stream_handler.setFormatter(formatter)
18-
stream_handler.setLevel(logging.INFO)
19+
stream_handler.setLevel(logging.NOTSET)
20+
21+
package_logger = logging.getLogger(__package__)
1922
package_logger.addHandler(stream_handler)
2023

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)
3024

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

Comments
 (0)