Skip to main content

Quick and easy logging parameters for click commands.

Project description

Quick and easy logging parameters for click commands.

1 Installation

The click_logging_config package is available from PyPI. Installing into a virtual environment is recommended.

python3 -m venv .venv; .venv/bin/pip install click_logging_config

2 Getting Started

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.

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.

--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,

  • disabled console logging (allows your application to use console output, if needed)

  • enabled file logging (1MB rotation size, with 10 rotation backups)

  • “warning” log level

3 Custom defaults

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.

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 .

Available top-level settings for logging defaults.

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.

Available console logging defaults.

Setting

Type

Hard default

Description

json_enabled

bool

False

Output JSON logs using json_log_formatter

Available file logging defaults.

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

4 Console logging

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.

5 File logging

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

click_logging_config-0.2.1.post3.tar.gz (18.1 kB view details)

Uploaded Source

Built Distribution

click_logging_config-0.2.1.post3-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file click_logging_config-0.2.1.post3.tar.gz.

File metadata

File hashes

Hashes for click_logging_config-0.2.1.post3.tar.gz
Algorithm Hash digest
SHA256 9dccf0e3878d12fc4c8f15902ee9c640cf65ce546564dc943cad5065fcb71574
MD5 45e5618305bd6187d96d3323da633cfc
BLAKE2b-256 872a188f840d23c674b2e635fe89778c3b60e20acf8c996079256bb7cb4aa11e

See more details on using hashes here.

File details

Details for the file click_logging_config-0.2.1.post3-py3-none-any.whl.

File metadata

File hashes

Hashes for click_logging_config-0.2.1.post3-py3-none-any.whl
Algorithm Hash digest
SHA256 8a7c96535c90940bd9084eed92152825b57fe062a720c4fae1d74cc29055b16e
MD5 f6cc6c0abcff1c0f1578a31591f10e3a
BLAKE2b-256 15a6059eb5f03bb3755addb1607b38665475f2d9d4d717b7e1aa6327bf36aa67

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page