Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
click-logging-config
Advanced tools
Quick and easy CLI logging options for click <https://palletsprojects.com/p/click/>
_
commands using a Python decorator.
I found myself implementing logging preferences repeatedly for utilities. Logging configuration is pretty simple, but for each new implementation I would find myself spending time researching the same options to refresh my memory and then implementing something slightly different than the last time. 🙄
click-logging-config
is my attempt to stop the circle of re-implementation
with settings that are useful enough, with configurability to change it if you
don't like the out-of-box behaviour. It's proving to be pretty useful and I'm
already using it across several of my other projects. 😄
It is released under the MIT license so you are free to use it in lots of different ways. As simple as it looks, a tool like this still represents research time and implementation effort, so please use the link below to help support development.
Support click-logging-config <https://byting-chipmunk.ck.page/products/click-logging-config>
_
Byting Chipmunk <https://bytingchipmunk.com>
_ 🐿
Take a byte off.
.. contents::
.. section-numbering::
The click-logging-config
package is available from PyPI. Installing
into a virtual environment is recommended.
.. code-block::
python3 -m venv .venv; .venv/bin/pip install click-logging-config
Using click-logging-config
is intended to be very simple. A single
decorator applied to your click command or group adds some click options
specifically for managing logging context.
.. code-block::
import click
import logging
from click_logging import logging_parameters
log = logging.getLogger(__name__)
def do_something()
pass
@click.command()
@click.option("--my-option", type=str)
# NOTE: Empty braces are required for hard-coded click-logging-config defaults.
@logging_parameters()
def my_command(my_option: str) -> None:
log.info("doing something")
try:
do_something(my_option)
except Exception as e:
log.critical(f"something bad happened, {str(e)}")
raise
Application of the @logging_parameters
decorator must be applied immediately
above your click command function and below any other click decorators such
as arguments and options.
Having applied the decorator, your command now has the following options available to it.
.. code-block::
--log-console-enable / --log-console-disable
Enable or disable console logging.
[default: log-console-disable]
--log-console-json-enable / --log-console-json-disable
Enable or disable console JSON logging.
[default: log-console-json-disable]
--log-file-enable / --log-file-disable
Enable or disable file logging.
[default: log-file-enable]
--log-file-json-enable / --log-file-json-disable
Enable or disable file JSON logging.
[default: log-file-json-enable]
--log-file FILE The log file to write to. [default: this.log]
--log-level [critical|error|warning|info|debug|notset]
Select logging level to apply to all enabled
log sinks. [default: warning]
Note that the single log level configuration parameter applies to both console and file logging.
The internal defaults are configured for an interactive utility (run by a human in a terminal rather than via automation, or in a container). In summary,
If you don't like the click-logging-config
internal defaults for the options
you can define your own. The LoggingConfiguration
class is derived from
pydantic.BaseModel
, so one easy way to define your defaults is using a
dictionary. You only need to define values you want to change - any other value
will continue using the internal defaults.
.. code-block::
import pathlib
import click
import logging
from click_logging import logging_parameters, LoggingConfiguration
log = logging.getLogger(__name__)
MY_LOGGING_DEFAULTS = LoggingConfiguration.parse_obj(
{
"file_logging": {
# NOTE: file path must be specified using pathlib.Path
"log_file_path": pathlib.Path("some_other.log"),
},
"log_level": "info",
}
)
def do_something()
pass
@click.command()
@click.option("--my-option", type=str)
@logging_parameters(MY_LOGGING_DEFAULTS)
def my_command(my_option: str) -> None:
log.info("doing something")
try:
do_something(my_option)
except Exception as e:
log.critical(f"something bad happened, {str(e)}")
raise
The table below summarizes the available settings for defaults. Otherwise
review the LoggingConfiguration
class definition <https://gitlab.com/ci-cd-devops/click_logging_config/-/blob/main/click_logging_config/_logging.py#L52>
_ .
.. csv-table:: Available top-level settings for logging defaults. :header: "Setting", "Type", "Hard default", "Description"
"log_level", "str", "warning", "Define log level"
"enable_console_logging", "boolean", "False", "Enable console logging"
"console_logging", "dict", "", "Console logging specific settings. See table below."
"enable_file_logging", "bool", "True", "Enable file logging"
"file_logging", "dict", "", "File logging specific settings. See table below."
.. csv-table:: Available console logging defaults. :header: "Setting", "Type", "Hard default", "Description"
"json_enabled", "bool", "False", "Output JSON logs using ``json_log_formatter``"
.. csv-table:: Available file logging defaults. :header: "Setting", "Type", "Hard default", "Description"
"json_enabled", "bool", "True", "Output JSON logs using ``json_log_formatter``"
"log_file_path", "pathlib.Path", "./this.log", "Path and name of log file."
"file_rotation_size_megabytes", "int", "1", "Maximum size of "
"max_rotation_backup_files", "int", "10", "Maximum number of rotation backup files"
Console logging can be enabled or disabled, and there is an additional option
to output line-by-line text based timestamped log entries, or JSON logging via
the json_log_formatter
framework. The format of text based log entries
cannot be configured at this time and console logging is always emitted to
stderr at this time.
File rotation on the file log is implemented as a "sensible default" - it cannot
be disabled at this time, although you might be able to specify a maximum
rotation of 1
to achieve the same end (not tested). The maximum rotation
size can be specified as a configuration default. File logging itself can be
enabled or disabled via defaults or the CLI options described above.
Similar to console logging the format can be as either text-based or JSON logging.
FAQs
Quick and easy logging parameters for click commands.
We found that click-logging-config demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.