Skip to main content

I wrote this before I learnt about Snoop: https://github.com/alexmojaki/snoop a much polished version of the same concept and implementation with an additional set of debug tools.

Tracelogger

Tag your functions with the @tracelogger decorator to be logged line-by-line.

Optionally provide a function as the printer argument that takes the local variable dictionary and returns a string. This allows the customisation of which variables and how you want to print at each line. See the example with the provided names_printer function that only prints a selected set of variables.

The second width parameter determines the maximum character number for each line of code defaulting to 80.

from tracelogger import tracelogger, names_printer


@tracelogger(width=30)
def second_test_function(x):
    y = x**2
    return y


@tracelogger(printer=lambda locals_: names_printer(locals_=locals_, names=['k', 'b']), width=30)
def first_test_function(a, b):
    c = a + b
    for k in range(5):
        if k % 2 == 0:
            b += k
        else:
            c += k
            second_test_function(c)
    return a, b, c

a, b, c = first_test_function(a=10, b=20)

This will print the following:

Entering function: first_test_function
    c = a + b                            locals: b=20
    for k in range(5):                   locals: b=20
        if k % 2 == 0:                   locals: b=20, k=0
            b += k                       locals: b=20, k=0
    for k in range(5):                   locals: b=20, k=0
        if k % 2 == 0:                   locals: b=20, k=1
            c += k                       locals: b=20, k=1
            second_test_function(c)      locals: b=20, k=1

Entering function: second_test_function
    y = x**2                             locals: x=31
    return y                             locals: x=31, y=961
    return y                             locals: x=31, y=961
Returning from: second_test_function() to: first_test_function()

    for k in range(5):                   locals: b=20, k=1
        if k % 2 == 0:                   locals: b=20, k=2
            b += k                       locals: b=20, k=2
    for k in range(5):                   locals: b=22, k=2
        if k % 2 == 0:                   locals: b=22, k=3
            c += k                       locals: b=22, k=3
            second_test_function(c)      locals: b=22, k=3

Entering function: second_test_function
    y = x**2                             locals: x=34
    return y                             locals: x=34, y=1156
    return y                             locals: x=34, y=1156
Returning from: second_test_function() to: first_test_function()

    for k in range(5):                   locals: b=22, k=3
        if k % 2 == 0:                   locals: b=22, k=4
            b += k                       locals: b=22, k=4
    for k in range(5):                   locals: b=26, k=4
    return a, b, c                       locals: b=26, k=4
    return a, b, c                       locals: b=26, k=4
Returning from: first_test_function() to: None

Join the Code Quality for Data Science (CQ4DS) Discord channel for feedback.

I used the following StackOverflow threads as sources, many thanks to their authors:

https://stackoverflow.com/questions/32163436/python-decorator-for-printing-every-line-executed-by-a-function

https://stackoverflow.com/questions/22362940/inspect-code-of-next-line-in-python

Download files

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

Source Distribution

tracelogger-0.1.3.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

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

tracelogger-0.1.3-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

File details

Details for the file tracelogger-0.1.3.tar.gz.

File metadata

  • Download URL: tracelogger-0.1.3.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.6 Linux/6.2.0-1016-azure

File hashes

Hashes for tracelogger-0.1.3.tar.gz
Algorithm Hash digest
SHA256 07ab00ed59afcb087a7863d429d36369a61eedcbe606a18f7aabc3ad295d6d61
MD5 bfd343e6b47e16c99a5ec3eb77dd7282
BLAKE2b-256 b67193f05a101c865e6b648360b277ff299a82bbbd43aecf8cf77d48fedd36c3

See more details on using hashes here.

File details

Details for the file tracelogger-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tracelogger-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 4.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.1 CPython/3.11.6 Linux/6.2.0-1016-azure

File hashes

Hashes for tracelogger-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 76e9c9c945613183178951a443a265f27ad892d0f11ec0c088d9e748c58ba52f
MD5 bbcd9574570f573103265e304395da18
BLAKE2b-256 020d59dbbaa8ee2bd7469f75e63baaf5f2b30d36d3fd48d728ccb2f601f5f383

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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