thep0y / python-black

Black formatter for Sublime Text

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Logging?

vgoklani opened this issue · comments

Hey there,

I see lots of these messages in the sublime text console:

python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}

is there a way to control logging? thanks!

commented

What version do you have installed? Try updating, by default logs will not be printed to the console.

Hey - thanks for the response, it's using v1.2.9; same as on package-control:

https://packagecontrol.io/packages/python-black

The logging is insane:

python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 23:4:     avg_train_prep = sum(train_prep) / len(train_prep)
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 23:4:     avg_train_prep = sum(train_prep) / len(train_prep)
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 23:4:     avg_train_prep = sum(train_prep) / len(train_prep)
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 23:4:     avg_train_prep = sum(train_prep) / len(train_prep)
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 23:4:     avg_train_prep = sum(train_prep) / len(train_prep)
python-black.commands [INFO]: use smart mode: False
python-black.python_black.black [INFO]: configuration file used: None
python-black.python_black.black [INFO]: configuration used: {'target_version': [], 'line_length': 88, 'is_pyi': False, 'skip_source_first_line': False, 'skip_string_normalization': False, 'skip_magic_trailing_comma': False, 'include': '(\\.pyi?|\\.ipynb)$'}
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/Lib/python38/sublime_plugin.py", line 1697, in run_
    return self.run(edit, **args)
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/commands.py", line 79, in run
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 260, in black_format
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 231, in format_by_import_black_package
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/black.py", line 205, in black_format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 246, in format_str
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/__init__.py", line 256, in _format_str_once
  File "/Users/vgoklani/Library/Application Support/Sublime Text/Installed Packages/python-black.sublime-package/python_black/lib/black/parsing.py", line 100, in lib2to3_parse
python-black.python_black.lib.black.parsing.InvalidInput: Cannot parse: 101:0:         eval_ppl, eval_epoch_loss = evaluate(
commented

This is strange, the logs only get printed in ST Console when log level is DEBUG, and log level is only DEBUG when this project is cloned into Packages directory.

def log_level() -> int:
"""Get the log level.
Returns `DEBUG` in debug mode, `INFO` otherwise.
Returns:
int: log level
"""
current_path = os.path.abspath(os.path.dirname(__file__))
return (
logging.INFO
if current_path.startswith(sublime.installed_packages_path())
else logging.DEBUG
)

if level == logging.DEBUG:
logger.addHandler(stream_handler())

In other words, when logs get printed to console, log level must be DEBUG, but there are no DEBUG level logs in your logs, which is really weird.

I installed python-black from package control, see the behavior in the video below, this is the expected behavior:

2023-08-08.15.40.33.mov

The logs get printed to ST Console only when log level is DEBUG, which requires the package be cloned to Packages directory. Installing from package control sets log level to INFO by default, so no logs get printed to console.

The python logging module works with a hierarchy.

There is a root logger at the top which you dont control, and sublime is adding a stream handler there.

Your logger is further down the hierarchy, and it doesnt matter currently if you add a stream handler or not, because all your loggers propagate the message up to the root handler which will print it to the console.

See https://docs.python.org/3/library/logging.html#logger-objects

I found 2 problems with the logger code

def child_logger(name: str) -> logging.Logger:
    """Get a new child logger with `name`.

    Args:
        name (str): the name of child logger

    Returns:
        Logger: the instance of `logging.Logger`
    """
    log = __logger.getChild(name.replace(f"{LOGGER_NAME}.", ""))
    log.setLevel(__logger.level)
    log.handlers = __logger.handlers
    return log

Adding levels and handlers to child loggers is not necessary because your top logger named "python-black" already has all the handlers, and child loggers will always propagate messages until it finds a ancestor with a handler.

So simply remove

    log.setLevel(__logger.level)
    log.handlers = __logger.handlers
def get_logger():

    logger = BlackLogger(LOGGER_NAME)
    logger.propagate = False

On your top logger set propagate = False so it never passes messages to the root logger which you don`t control.

Also you might want to explore this example here for a plugin

https://github.com/SublimeText/PackageDev/blob/master/_logging.py

This sets logging on the plugin_loaded() signal, an it takes the logging level from the sublime settings, which allows your users to configure the logging level via sublime settings.

This would allow your users to supply debug info, without cloning the package.