Skip to main content

LoggerWrapper Package

This package provides wrappers for the built-in logging.Logger class:

PseudoSingletonLogger::

The PseudoSingletonLogger class inherits the logging.Logger and instantiates a singleton for each logger name give.
PsudoSigletonLogger pre-configures some of the common tasks like formating to help a standardize logging format.
If given the optional 'app_name' the name of the application is placed in the header.
If given the 'use_instance' flag a space is allocated for the instance name for the client class to inject during logging.
If given the optional 'name' string the name is used to find the logger by that name, otherwise the 'root' logger is used.
Each unique 'name' creates a new instance. Setting the name equal to None will use the previously used instance. Using a previously used name will return that instance.

The PsudoSigletonLogger class has the following methods::

set_default_format(logger_name: str = None, app_name: str = None, use_instance: bool = False):
Sets the default logging format for the given logger_name. If no logger_name than the default is the last_logger instance used.

get_output_path(logger_name: str = None, handler_type: logging.Handler=None):
Tries to retrieve a list of output targets of the handler that matches the type passed in. If handler_type is None, all the output targets for all the registered handlers are returned.
If no logger_name provided than the default is the last_logger instance used.

NOTE: Not fully tested for all handler types. Tested on StreamHandler, FileHandler, and SyslogHandler

remove_handler(logger_name: str = None, handler_type: logging.Handler=None):
Removes the handlers that matches the type passed in. If the handler_type is None or the handler_type is not registered, none of the handlers will be removed. If an abstract handler is given, all handler that have inherited will be removed.
If no logger_name provided than the default is the last_logger instance used.

version:
The package version.

LoggerWrapper::

The LoggerWrapper class wraps the logging.Logger to pre-configure some of the common tasks like formating. Provides a quick access to logging by formating the messages to help stardardize the log entries. This class injects the instance name into the log messages.
If given the optional 'instance_name' string the given name is used, otherwise the instance name is extracted from the stack. The instance name is inject into the header during logging.
If given the optional 'name' string the name is used to find the logger by that name, otherwise the 'root' logger is used.

The LoggerWrapper class has the following methods::

change_instance_name(self, instance_name: str):
Changes the instance name to use in the log message header.

_log(level, msg, args, exc_info=None, extra=None, stack_info=False, stacklevel: int=1):
Overwrites the logging.Logger._log method to inject the instance name in the log message header.

LoggerWrapper also exposes the PseudoSingletonLogger methods as its own.

Example Usage ::

import logging
from logging import handlers as hdls
from pathlib import Path

if __name__ == "__main__":
    log_path = Path(".logs", "test.log")
    if not log_path.parent.exists():
        log_path.parent.mkdir(parents=True, exist_ok=True)
    handlers = [logging.StreamHandler(),
                logging.FileHandler(log_path)]
    log1 = LoggerWrapper(app_name="LoggerWrapper Demo",
                         handlers=handlers,
                         meta=True,
                         date_filename=False)

    log2 = LoggerWrapper()
    print(log2.version)

    print(str(log1.get_output_path()))

    for count in range(10):
        if count == 5:
            log1.remove_handler(logging.StreamHandler)
        log1.info("test of " + str(count))
        log2.info("test of " + str(count))

    print(str(log2.get_output_path()))
    print(log1.version)

Console ::

0.1.0
['', '/home/erol/workspace/logger-wrapper/.logs/test.log']
2023-05-03 23:15:41,123,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 0
2023-05-03 23:15:44,484,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 0
2023-05-03 23:15:48,254,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 1
2023-05-03 23:15:49,052,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 1
2023-05-03 23:15:51,307,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 2
2023-05-03 23:15:51,904,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 2
2023-05-03 23:15:53,822,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 3
2023-05-03 23:15:54,505,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 3
2023-05-03 23:15:56,481,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 4
2023-05-03 23:15:57,099,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 4
['/home/erol/workspace/logger-wrapper/.logs/test.log']
0.1.0

cat ~/workspace/logger-wrapper/.logs/test.log ::

2023-05-03 23:15:41,123,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 0
2023-05-03 23:15:44,484,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 0
2023-05-03 23:15:48,254,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 1
2023-05-03 23:15:49,052,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 1
2023-05-03 23:15:51,307,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 2
2023-05-03 23:15:51,904,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 2
2023-05-03 23:15:53,822,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 3
2023-05-03 23:15:54,505,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 3
2023-05-03 23:15:56,481,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 4
2023-05-03 23:15:57,099,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 4
2023-05-03 23:16:01,619,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 5
2023-05-03 23:16:02,369,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 5
2023-05-03 23:16:04,266,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 6
2023-05-03 23:16:04,763,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 6
2023-05-03 23:16:06,621,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 7
2023-05-03 23:16:07,148,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 7
2023-05-03 23:16:09,007,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 8
2023-05-03 23:16:09,595,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 8
2023-05-03 23:16:12,300,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log1:logger_wrapper::408],test of 9
2023-05-03 23:16:12,301,LoggerWrapper Demo,[INFO:pid=3356970:MainThread:log2:logger_wrapper::409],test of 9

Metadata

Release files for logger-wrapper 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for logger-wrapper 0.1.0
File Size Uploaded
logger_wrapper-0.1.0.tar.gz 11.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for logger-wrapper 0.1.0
File Interpreter ABI Platform
logger_wrapper-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.7 kB

Release files / logger_wrapper-0.1.0.tar.gz

Download URL logger_wrapper-0.1.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9e22cb406d814e7f4272e527fb8ce1622c4d8a334d72e9038b7a50d5b2998948
BLAKE2b-256 checksum
How to use checksums
2ea5be822f3c87b5a198f8ce854b8573f94ae7a8d6473c20d98afa4f9d881389
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Release files / logger_wrapper-0.1.0-py3-none-any.whl

Download URL logger_wrapper-0.1.0-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ca8b87a20300bed4dbb8fb802a2c5886eb424e68535f0ba88076857c0c800c83
BLAKE2b-256 checksum
How to use checksums
a69a15c41da8a0eb180c54165148b8b8ddfb1ef72b12e2fafa83e5333ca80489
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page