Skip to main content

Make logging simple, log even exception that you forgot to catch

Project description

Logger_tt

Make configuring logging simpler and log even exceptions that you forgot to catch.

Usage:

Install: pip install logger_tt

In the most simple case, add the following code into your main python script of your project:

from logger_tt import setup_logging    

setup_logging()

Then from any of your modules, you just need to get a logger and start logging.

from logging import getLogger

logger = getLogger(__name__)

logger.debug('Module is initialized')
logger.info('Making connection ...')

This will provide your project the following default log behavior:

  • log file: Assume that your working directory is project_root, log.txt is stored at your project_root/logs/ folder. If log path doesn't exist, it will be created. The log file is time rotated at midnight. Maximum of 15 dates of log will be kept. This log file's level is DEBUG.
    The log format is [%(asctime)s] [%(name)s %(levelname)s] %(message)s where time is %Y-%m-%d %H:%M:%S.
    Example: [2020-05-09 00:31:33] [myproject.mymodule DEBUG] Module is initialized

  • console: log with level INFO and above will be printed to stdout of console.
    The format for console log is simpler: [%(asctime)s] %(levelname)s: %(message)s.
    Example: [2020-05-09 00:31:34] INFO: Making connection ...

  • urllib3 logger: this ready made logger is to silent unwanted messages from requests library.

  • root logger: if there is no logger initialized in your module, this logger will be used with above behaviors. This logger is also used to log uncaught exception in your project. Example:

raise RecursionError
# log.txt
[2020-05-09 11:42:08] [root ERROR] Uncaught exception
Traceback (most recent call last):
  File "D:/MyProject/Echelon/eyes.py", line 13, in <module>
    raise RecursionError
RecursionError

Config:

All config are done through setup_logging function:

setup_logging(config_path="", log_path="", capture_print=False, strict=False, guess_level=False)
  1. You can overwrite the default log path with your own as following:

    setup_logging(log_path='new/path/to/your_log.txt')
    
  2. You can config your own logger and handler by providing either yaml or json config file as following:

    setup_logging(config_path='path/to/.yaml_or_.json')
    

    Without providing a config file, the default config file with above default log behavior is used. You could copy log_conf.yaml or log_conf.json shipped with this package to start making your version.

    Warning: To process .yaml config file, you need to pyyaml package: pip install pyyaml

  3. Capture stdout: If you have old code base with a lot of print(msg) or sys.stdout.write(msg) and don't have access or time to refactor them into something like logger.info(msg), you can capture these msg and log them to file, too.

    To capture only msg that is printed out by print(msg), simply do as following:

    setup_logging(capture_print=True)
    

    Example:

    print('To be or not to be')
    sys.stdout.write('That is the question')
    
    # log.txt
    [2020-05-09 11:42:08] [PrintCapture INFO] To be or not to be
    

    Yes, That is the question is not captured. Some library may directly use sys.stdout.write to draw on the screen or do something quirk, with is usually not a useful information. But when you do need it, you can capture it as following:

    setup_logging(capture_print=True, strict=True)
    

    Example:

    sys.stdout.write('The plane VJ-723 has been delayed')
    sys.stdout.write('New departure time has not been scheduled')
    
    # log.txt
    [2020-05-09 11:42:08] [PrintCapture INFO] The plane VJ-723 has been delayed
    [2020-05-09 11:42:08] [PrintCapture INFO] New departure time has not been scheduled
    

    As you have seen, the log level of captured message is `INFO`. What if the code base prints something like `An error has occurred. Abort operation.` and you want to log it as `Error`, just add `guess_level=True` to `setup_logging()`.
    setup_logging(capture_print=True, guess_level=True)
    

    Example:

    print('An error has occurred. Abort operation.')
    print('A critical error has occurred during making request to database')
    
    # log.txt
    [2020-05-09 11:42:08] [PrintCapture ERROR] An error has occurred. Abort operation.
    [2020-05-09 11:42:08] [PrintCapture CRITICAL] A critical error has occurred during making request to database
    

    Note: Capturing stdout ignores messages of blank line. That means messages like \n\n or (spaces) will not appear in the log. But messages that contain blank line(s) and other characters will be fully logged. For example, \nTo day is a beautiful day\n will be logged as is.

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

logger_tt-1.1.0.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

logger_tt-1.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file logger_tt-1.1.0.tar.gz.

File metadata

  • Download URL: logger_tt-1.1.0.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.4

File hashes

Hashes for logger_tt-1.1.0.tar.gz
Algorithm Hash digest
SHA256 e665cbb84c8b9d5edcf9707c331b622a377bb2ebb9ea3f0914046eb2e2aa2b0b
MD5 bc8251f86f1f610cd517974619783c6d
BLAKE2b-256 317f927214f43360705bdc121e53926a200afde4ef09b3ed4e0cf1b4fc819ec2

See more details on using hashes here.

File details

Details for the file logger_tt-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: logger_tt-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.4

File hashes

Hashes for logger_tt-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 68335a3c0487ae7cbc2c96799e067ce869bd6d9cd566c679e0e70c55dbefc218
MD5 dab4e51d0a5272e89b08c401b65ac896
BLAKE2b-256 e31c892c64869f76ee81a6bbc85172243c854936b5e589f3b7c51abffee554dc

See more details on using hashes here.

Supported by

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