Setting up a debugger plugin¶
Introduction¶
Each good developer knows, how important is the possibility to read proper logs from running application when there is some issue. MkDocs by default produces some logs while documentation is being built or while the built-in server is running. Because the whole MkDocs is written using the Python programming language, there is a possibility to configure a debugger in tools like PyCharm or VsCode. But how to handle logging when you are just a user and do not have a needed knowledge and just want to submit an issue because you have found some problem? To help with debugging by logging and producing additional files that can be attached to the issue submission, Publisher for MkDocs contains a pub-debugger
plugin. It's built with 3 main modules:
- console logger that allows to change the output produced to the console,
- file logger that allows to produce the log file,
- Zip file generator that allows to produce a Zip file with log file produced by previous module and some additional files like
mkdocs.yml
and Python package files likerequirements.txt
orpyproject.tml
andpoetry.lock
(depends on type of Python package manager you have used).
Console and file logger settings
Both console and file loggers are configured separately and their defaults settings are different.
Privacy disclaimer
pub-debugger
plugin do not send any files over the internet, but if you want to use a Zip file as an attachment for an issue submission or share it with anybody, before please make a review of the content of this archive file.
Please remember
It's your data and your responsibility what you are publishing over the internet. This plugin is only giving you the tool that should help, and you cannot blame me (the author of this plugin) for any potential data leaks.
Python logging for MkDocs¶
Information
This section is for any MkDocs plugin developer.
Because MkDocs is written in Python, whenever someone wants to write a new plugin and see some information during documentation build, he has to use a logging library. The usual use of this library is to do something like this:
The biggest problem with this approach is that __name__
becomes a file name (without extension), so the logger for the above example is new_mkdocs_plugin
. Since all loggers inside MkDocs have a name corresponding to a directory structure that leads to the file where logger is used, any MkDocs plugin developer should do the same.
The best practice for logger naming
Logger name should be built according to given structure:
mkdocs.plugins.[project_name].[directory].[optional_sub_directories].[file_name]
.
Let's take a look at one of the files from this project repository.
Configuration¶
To enable the built-in debugger plugin, the following lines have to be added to mkdocs.yml
file:
Console logging¶
By default, MkDocs produces a console log, that contains only basic information like log level and log message. In normal usage, this information is quite sufficient, but when any problem with a build process occurs, it's quite hard to find a specific line where the problem has happened. Because of that, pub-debugger
allows you to override the default console logger with one that contains more information. Below you can find what does it look like:
Code link
Be aware, that the above screenshot is the most future rich output. The default plugin configuration doesn't enable the code link section (it has to be enabled).
plugins:
- pub-debugger:
console_log:
enabled: true
log_level: INFO
show_code_link: false
show_logger_name: true
show_entry_time: true
show_deprecation_warnings: false
entry_time_format: "%H:%M:%S.%f"
filter_logger_names: []
Above you can find all possible settings with their default values. You don't have to provide them. Just use them if you want to change some settings. The description of the meaning of given setting, you can find below.
enabled
Controls if console log will be replaced with a new, richer format.
show_code_link
Controls if the code link part is visible in the log message (useful for IDE like PyCharm).
show_logger_name
Controls if the logger name part is visible in the log message (useful when you want to filter some of the messages or plugins).
show_entry_time
Controls if the time entry part is visible in the log message.
show_deprecation_warnings
Controls if deprecation warnings will be visible in the log message.
entry_time_format
Defines time format.
filter_logger_names
Define a list of logger names that will be filtered out of the log messages.
File logging¶
plugins:
- pub-debugger:
file_log:
enabled: true
log_level: DEBUG
log_format: "[%(created).14s][%(levelname)-5.5s][%(project_path)s:%(lineno)d] %(message)s"
remove_old_files: true
filter_logger_names: []
Above you can find all possible settings with their default values. You don't have to provide them. Just use them if you want to change some settings. The description of the meaning of given setting, you can find below.
enabled
Controls if log file will be created.
log_format
Defines format of the message that will be put into the log file.
remove_old_files
Controls if previously created log files will be removed while creating a new one.
filter_logger_names
Define a list of logger names that will be filtered out of the log messages.
Zip file generation¶
Above you can find all possible settings with their default values. You don't have to provide them. Just use them if you want to change some settings. The description of the meaning of given setting, you can find below.
enabled
Controls if zip file will be created.
remove_old_files
Controls if previously created zip files will be removed while creating a new one.
add_pip_freeze
Controls if zip file will contain a requirements.txt
file with a list of Python libraries (it's helpful with issue reproduction when you want to report one).
Backlinks:
v1.1.0 - 2023-09-01
Here I am with a new version of Publisher for MkDocs plugins. I have promised to make smaller releases, but my brain is refusing me to work on a small scale. It's really hard to achieve that, especially when I started to have some feedback from you, users of this tool. Because of that feedback and some problems you encountered, I decided to focus in this release on 2 main topics: some bug fixing and introducing a new plugin called pub-debugger. This plugin allows for an insight into all messages produced by plugins while building (or serving) a web page. Also, it's able to produce a ZIP file, with some basic information that could help me, whenever you will need to report an https://github.com/mkusz/mkdocs-publisher/issues.
- ♻️ logger names unification - it's related to pub-debugger plugin
v1.3.0 - 2024-04-18
- ❎ live reload time stamp removed from log message when show_entry_timesetting is enabled (its default value)
- ❎ adding the possibility to remove deprecation warnings when show_deprecation_warningssetting is disabled (its default value)
Changelog
- ❎ live reload time stamp removed from log message when show_entry_timesetting is enabled (it's default value)
- ❎ adding possibility to remove deprecation warnings when show_deprecation_warningssetting is disabled (it's default value)
- ♻️ logger names unification - it's related to pub-debugger plugin